6 个版本 (3 个重大变更)
| 0.6.0 | 2020年3月21日 |
|---|---|
| 0.6.0-alpha.1 | 2020年3月17日 |
| 0.5.1 | 2020年2月17日 |
| 0.5.0 | 2019年11月2日 |
| 0.3.0 | 2019年9月23日 |
#667 in 算法
1,276 每月下载量
在 216 个crate中使用 (直接使用 16)
56KB
762 行
与 C++ 互操作性的实用工具
有关更多信息,请参阅项目的 README。
API 尚不稳定。新的小版本中可能会发生破坏性变更。
指针
cpp_core 提供了三种类型的指针
CppBox:拥有者,非空(对应于通过值传递的 C++ 对象)Ptr:可能拥有者,可能为空(对应于 C++ 指针)Ref:非拥有者,非空(对应于 C++ 引用)
通过这些指针访问对象本质上是不安全的,因为编译器无法保证由 C++ 库管理的对象的指针的有效性。
与 Rust 引用不同,这些指针可以自由复制,产生多个指向同一对象的可变指针,这在与 C++ 库一起工作时通常很有必要。
指针类型实现了操作符特征并将其委托给相应的 C++ 操作符。这意味着您可以使用 ptr1 + ptr2 访问对象的 operator+。
指针类型实现了 Deref,允许直接调用对象的方法。此外,由于嵌套 Deref 实现的嵌套,对象的第一基类的方法定义也是直接可用的。
如果对象通过 begin() 和 end() 函数提供了迭代器接口,则指针类型将实现 IntoIterator,因此您可以直接迭代它们。
转换
以下特征提供了在 C++ 类类型之间进行转换的访问权限
StaticUpcast安全地将派生类转换为基类(由 C++ 的static_cast支持)。DynamicCast执行从基类到派生类的检查转换(由 C++ 的dynamic_cast支持)。StaticDowncast在不进行运行时检查的情况下将基类转换为派生类(也由 C++ 的static_cast支持)。
直接使用这些特性不如使用指针类型上的 static_upcast、static_downcast、dynamic_cast 辅助函数更方便。
CastFrom 和 CastInto 特性代表了 C++ 中的一些隐式转换。例如,如果某个方法接受 impl CastInto<Ptr<SomeClass>>,你可以传递一个 Ptr<SomeClass>、&CppBox<SomeClass>,甚至是 Ptr<DerivedClass>(其中 DerivedClass 继承自 SomeClass))。如果你没有值,也可以传递一个空指针对象(NullPtr)。你也可以选择使用 Ptr::null(),但这可能会引起类型推断问题。
依赖项
~43KB