【CXX】6 内置绑定

除了所有基本类型(如 i32 <=> int32_t),以下常见类型可以用于共享结构体的字段以及外部函数的参数和返回值。

Rust 中的名称 C++ 中的名称 限制条件
String rust::String
&str rust::Str
&T rust::Slice 不能包含不透明的 C++ 类型
&mut T rust::Slice 不能包含不透明的 C++ 类型
CxxString std::string 不能按值传递
Box rust::Box 不能包含不透明的 C++ 类型
UniquePtr std::unique_ptr 不能包含不透明的 Rust 类型
SharedPtr std::shared_ptr 不能包含不透明的 Rust 类型
T; N std::array<T, N> 不能包含不透明的 C++ 类型
Vec rust::Vec 不能包含不透明的 C++ 类型
CxxVector std::vector 不能按值传递,不能包含不透明的 Rust 类型
*mut T, *const T T*, const T* 带有裸指针参数的函数必须声明为 unsafe 才能调用
fn(T, U) -> V rust::Fn<V(T, U)> 目前仅支持从 Rust 传递到 C++
Result throw/catch 仅允许作为返回类型

C++ 中 rust 命名空间的 API 由 CXX GitHub 仓库中的 include/cxx.h 文件定义。在使用这些类型时,你需要在 C++ 代码中包含此头文件。当使用 Cargo 和 cxx-build crate 时,可以通过 #include "rust/cxx.h" 包含此头文件。

rust 命名空间还提供了表中所有类型的小写别名,适用于偏好这种风格的代码库。例如,rust::String 和 rust::Vec 也可以写成 rust::string 和 rust::vec 等。

待实现的绑定

以下类型计划在"不久的将来"支持,但目前尚未实现。这些类型的实现预计不会太困难,但需要为每种类型在其非原生语言中设计一个良好的 API。

Rust 中的名称 C++ 中的名称
BTreeMap<K, V> 待定
HashMap<K, V> 待定
Arc 待定
Option 待定
待定 std::map<K, V>
待定 std::unordered_map<K, V>
相关推荐
unconditional2 小时前
我拆了 sdkm 的回滚设计:每个写操作,都提前写好了翻车预案
rust·开源
数字幽灵3 小时前
开源!我用 Rust 手搓了一个 Agent 原生的鸿蒙逆向分析平台
rust
奇树谦1 天前
Qt Quick 图片加载与 GPU 纹理机制详解:QImage、QQuickTextureFactory、QSGTexture 与异步加载
开发语言·qt·系统架构
Kapaseker1 天前
Rust 不用写 for 循环?看我怎么写!
rust
奶油话梅糖1 天前
打开项目 0.9 秒、内存只有 IDEA 的 1/12:OpenIDEA 用 Rust 把 IntelliJ IDEA 重造了一遍
java·rust·github·intellij-idea
Vex2une2 天前
Google Picasa 精神续作:Rust 重写的离线本地相册工具‌
rust·图片管理·picasa·马良·本地照片管理·重复图片检测·maliang
BroNekoX2 天前
我将基于 QtQuick 框架开发的音乐播放器性能做到顶级
qt
小小晓.2 天前
Qt 对话框、QLineEdit 与布局管理实战详解
开发语言·qt
扶尔魔ocy3 天前
【QT入门到晋级】用开源的自定义控件开发
c++·qt·自定义控件
unconditional3 天前
我拆了 sdkm 的自定义 SDK 机制:所谓“内置”,就是官方提前帮你填好的表
rust·开源