C++ 错误处理

  1. #[cxx::bridge]
  2. mod ffi {
  3. unsafe extern "C++" {
  4. include!("example/include/example.h");
  5. fn fallible(depth: usize) -> Result<String>;
  6. }
  7. }
  8. fn main() {
  9. if let Err(err) = ffi::fallible(99) {
  10. eprintln!("Error: {}", err);
  11. process::exit(1);
  12. }
  13. }
  • 声明用于返回 Result 的 C++ 函数将捕获 C++ 端抛出的任何异常,并将其作为 Err 值返回给调用 Rust 函数。
  • 如果外部 “C++”函数抛出l了异常,但 CXX 桥接中未声明该函数用于返回 Result,则程序会调用 C++ 的 std::terminate。此行为等同于通过 C++ 函数 nowithout 抛出了相同的异常。