当前位置: 首页 > news >正文

【CXX】5.4 属性

命名空间

顶层的 cxx::bridge 属性宏接受一个可选的命名空间参数,用于控制生成外部 Rust 项的 C++ 命名空间,以及期望找到外部 C++ 项的命名空间。

#[cxx::bridge(namespace = "path::of::my::company")]
mod ffi {
    extern "Rust" {
        type MyType;  // 生成到 path::of::my::company::MyType
    }

    extern "C++" {
        type TheirType;  // 引用 path::of::my::company::TheirType
    }
}

此外,可以在桥接模块中的任何 extern 块或单个项上使用 #[namespace = “…”] 属性。如果某个项没有指定命名空间,它将继承其所在的 extern 块指定的命名空间(如果有的话),否则将继承顶层 cxx::bridge 属性指定的命名空间(如果有的话),否则将使用全局命名空间。

#[cxx::bridge(namespace = "third_priority")]
mod ffi {
    #[namespace = "second_priority"]
    extern "Rust" {
        fn f();

        #[namespace = "first_priority"]
        fn g();
    }

    extern "Rust" {
        fn h();
    }
}

上述代码将生成函数 ::second_priority::f、::first_priority::g 和 ::third_priority::h。

rust_name, cxx_name

有时你希望函数或类型的 Rust 名称与其 C++ 名称不同。重要的是,这允许使用不同的 Rust 名称绑定同一个 C++ 函数名的多个重载。

复制
#[cxx::bridge]
mod ffi {
    unsafe extern "C++" {
        #[rust_name = "i32_overloaded_function"]
        fn cOverloadedFunction(x: i32) -> String;
        #[rust_name = "str_overloaded_function"]
        fn cOverloadedFunction(x: &str) -> String;
    }
}

#[rust_name = “…”] 属性替换了 Rust 应该使用的函数名称,而类似的 #[cxx_name = “…”] 属性替换了 C++ 应该使用的名称。

这两个属性中的任何一个都可以用于 extern “Rust” 和 extern “C++” 函数,具体取决于你在上下文中认为哪个更清晰。

相同的属性适用于重命名函数、不透明类型、共享结构体和枚举以及枚举变体。

相关文章:

  • 国产编辑器EverEdit - 安装扩展功能的方式
  • 当AI开始“思考“:拆解大模型训练与推理的秘密(以DeepSeek为例)
  • Java ThreadLocal
  • LINUX本地磁盘DISK空间扩容
  • SpringBoot 集成nacos,实现动态配置更新、docker安装nacos
  • 排序算法-冒泡排序
  • 计算机毕设-基于springboot的物业管理系统的设计与实现(附源码+lw+ppt+开题报告)
  • GPT-4 Turbo的重大升级与深远影响
  • Zabbix 安装部署
  • Ruby 安装 - Linux
  • 在 Ubuntu 上安装和切换多个 GCC 版本
  • 在Linux系统上集成OpenSlide与SpringBoot
  • HTTPS安全通信协议原理
  • Pytest安装和介绍
  • 【Go】Go zap 日志模块
  • STM32项目分享:STM32智能窗户
  • AI 实战 - pytorch框架基于retinaface实现face检测
  • Spring Boot面试问答
  • Docker 部署 vaultwarden
  • SyntaxError: Unexpected token ‘xxx‘
  • 优秀设计作品网站/百度竞价推广价格
  • 网站建设 你真的懂吗/凡科建站的优势
  • 做设计找参考的设计网站有哪些/谷歌地图下载
  • 在北京建设教育协会的网站/徐州网络推广服务
  • 响应式建站工具/夸克浏览器网页版入口
  • 泉州比较好的网站开发建设公司/网站服务器失去响应