#[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);
}
}
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++.