Tratamento de Erros do C++

#[cxx::bridge] mod ffi { unsafe extern "C++" { include!("example/include/example.h"); fn fallible(depth: usize) -> Result<String>; } } fn main() { if let Err(err) = ffi::fallible(99) { eprintln!("Erro: {}", err); process::exit(1); } }

Speaker Notes

  • As funçÔes C++ declaradas para retornar um Result capturarĂŁo qualquer exceção lançada no lado C++ e a retornarĂŁo como um valor Err para a função
  • Se uma exceção for lançada de uma função externa “C++” que nĂŁo Ă© declarada pela bridge CXX para retornar Result, o programa chama std::terminate do C++. O comportamento Ă© equivalente Ă  mesma exceção sendo lançada por meio de uma função noexcept C++.