Обробка помилок в 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!("Помилка: {}", err); process::exit(1); } }

Speaker Notes

  • Функції C++, оголошені як такі, що повертають Result, перехоплять будь-яке згенероване виключення на стороні C++ і повернуть його у вигляді значення Err до викликаючої функції Rust.
  • Якщо виключна ситуація виникає з функції extern “C++”, яка не оголошена мостом CXX і повертає Result, програма викликає std::terminate у C++. Поведінка еквівалентна тій самій виключній ситуації, яка виникає через функцію C++ noexcept.