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); } }

Speaker Notes

  • Result を返すように宣言された C++ 関数は、C++ 側でスローされたあらゆる例外をキャッチし、呼び出し元の Rust 関数に Err 値として返します。
  • CXX ブリッジでResultを返すように宣言されていないextern “C++“関数から例外がスローされると、Resultが返されると、プログラムは C++ のstd::terminateを呼び出します。この動作は、同じ例外がnoexcept C++ 関数でスローされた場合と同等です。