6 个版本 (3 个重大变更)

0.6.0 2020年3月21日
0.6.0-alpha.12020年3月17日
0.5.1 2020年2月17日
0.5.0 2019年11月2日
0.3.0 2019年9月23日

#667 in 算法

Download history 234/week @ 2024-04-04 415/week @ 2024-04-11 354/week @ 2024-04-18 340/week @ 2024-04-25 392/week @ 2024-05-02 336/week @ 2024-05-09 375/week @ 2024-05-16 299/week @ 2024-05-23 371/week @ 2024-05-30 297/week @ 2024-06-06 393/week @ 2024-06-13 520/week @ 2024-06-20 267/week @ 2024-06-27 269/week @ 2024-07-04 272/week @ 2024-07-11 373/week @ 2024-07-18

1,276 每月下载量
216 个crate中使用 (直接使用 16)

MIT/Apache

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_upcaststatic_downcastdynamic_cast 辅助函数更方便。

CastFromCastInto 特性代表了 C++ 中的一些隐式转换。例如,如果某个方法接受 impl CastInto<Ptr<SomeClass>>,你可以传递一个 Ptr<SomeClass>&CppBox<SomeClass>,甚至是 Ptr<DerivedClass>(其中 DerivedClass 继承自 SomeClass))。如果你没有值,也可以传递一个空指针对象(NullPtr)。你也可以选择使用 Ptr::null(),但这可能会引起类型推断问题。

依赖项

~43KB