مدیریت خطا ++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);
    }
}
  • توابع ++C اعلام شده (declared) برای برگرداندن Result، هر exception صورت گرفته شده در سمت ++C را می‌گیرند و آن را به عنوان مقدار Err به تابع فراخوانی Rust برمی‌گردانند.
  • اگر یک exception از یک extern "C++" function که توسط پل CXX برای بازگشت "نتیجه" اعلان نشده است، ایجاد شود، برنامه C++' std::terminate را فراخوانی می‌کند. این رفتار معادل همان exception است که از طریق یک noexcept C++ function فعال می‌شود.