錯誤處理

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