Rust ブリッジ宣言

// 著作権 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

#[cxx::bridge]
mod ffi {
    extern "Rust" {
        type MyType; // Opaque type
        fn foo(&self); // Method on `MyType`
        fn bar() -> Box<MyType>; // Free function
    }
}

struct MyType(i32);

impl MyType {
    fn foo(&self) {
        println!("{}", self.0);
    }
}

fn bar() -> Box<MyType> {
    Box::new(MyType(123))
}
  • extern "Rust" で宣言された項目は、親モジュールでスコープ内にある項目を参照します。
  • CXX コードジェネレータは、対応する C++ 宣言を含む C++ ヘッダーファイルを生成するために、extern "Rust" セクションを使用します。生成されるヘッダーは、ブリッジを含む Rust ソースファイルと同じパスを持ちますが、ファイル拡張子は .rs.h になります。