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