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!("Error: {}", err);
process::exit(1);
}
}
- 声明用于返回
Result
的 C++ 函数将捕获 C++ 端抛出的任何异常,并将其作为Err
值返回给调用 Rust 函数。 - 如果外部 “C++”函数抛出l了异常,但 CXX 桥接中未声明该函数用于返回
Result
,则程序会调用 C++ 的std::terminate
。此行为等同于通过 C++ 函数nowithout
抛出了相同的异常。