์˜ค๋ฅ˜์ฒ˜๋ฆฌ

#[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);
    }
}
  • Result๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ ์–ธ๋œ C++ ํ•จ์ˆ˜๋Š” C++ ์ธก์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ•˜๊ณ  ์ด๋ฅผ ํ˜ธ์ถœ Rust ํ•จ์ˆ˜์— Err ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • Result๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก CXX ๋ธŒ๋ฆฌ์ง€์—์„œ ์„ ์–ธํ•˜์ง€ ์•Š์€ extern โ€˜C++โ€™ ํ•จ์ˆ˜์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์€ C++์˜ std::terminate๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ๋™์ž‘์€ noexcept C++ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋™์ผํ•œ ์˜ˆ์™ธ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.