نمونه اتصال‌ها (Bindingها)

‏ CXX مستلزم آن است که کل مرز C++/Rust در ماژول‌های cxx::bridge در کد منبع .rs اعلام شود.

#[cxx::bridge]
mod ffi {
    extern "Rust" {
        type MultiBuf;

        fn next_chunk(buf: &mut MultiBuf) -> &[u8];
    }

    unsafe extern "C++" {
        include!("example/include/blobstore.h");

        type BlobstoreClient;

        fn new_blobstore_client() -> UniquePtr<BlobstoreClient>;
        fn put(self: &BlobstoreClient, buf: &mut MultiBuf) -> Result<u64>;
    }
}

// Definitions of Rust types and functions go here

اشاره کنید:

  • اگرچه این شبیه به یک mod معمولی Rust است، اما ماکرو رویه‌ای #[cxx::bridge] کارهای پیچیده‌ای برای آن انجام می‌دهد و کد تولید شده کمی پیچیده تر است - اگرچه این کار همچنان منجر به یک mod به نام ffi در کد شما می شود.
  • پشتیبانی Native در ++C برایstd::unique_ptrدر Rust
  • پشتیبانی Native برای Rust Slices در ++C
  • فراخوانی از ++C به Rust و تایپ‌های Rust (در قسمت بالا)
  • فراخوانی از Rust به ++C و تایپ‌های ++C (در قسمت پایین)

تصور نادرست رایج**: به نظر می‌رسد هِدِر ++C توسط Rust تجزیه می‌شود، اما این گمراه کننده است. این هِدِر هرگز توسط Rust تفسیر نمی‌شود، بلکه به سادگی #include در کد ++C تولید‌شده برای کامپایلرهای ++C است.