錯誤處理

#[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++ 端的任何擲回例外狀況,並將其當做 Err 值傳回至發出呼叫的 Rust 函式。
  • 假使例外狀況是從 CXX 橋接器未宣告的外部「C++」函式擲回,藉此傳回 Result,則程式會呼叫 C++ 的 std::terminate。此行為等同於透過 noexcept C++ 函式擲回的相同例外狀況。