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