#traits #generic #methods #object #macro #generate #object-safe

erased-generic-trait

用于从具有泛型方法的特质生成特质对象的宏

4个版本

0.0.4 2023年11月11日
0.0.3 2023年11月2日
0.0.2 2023年11月1日
0.0.1 2023年10月31日

#439 in 过程宏

每月下载量 23次

Apache-2.0 OR MIT

40KB
651

erased-generic-trait

一个用于从具有泛型方法的特质生成特质对象的Rust crate。

何时使用

  • 当你想从一个具有泛型方法的特质创建特质对象时。
  • 当泛型方法只有一个类型的界限时。
  • 当泛型方法需要 'static 生命周期时。
  • 当你可以知道在转换为特质对象之前传递给泛型方法的全部类型。

动机

在Rust中,只有对象安全特质才能成为特质对象,泛型方法使它们不安全。为了克服这个限制,我们可以使用 dyn Any 作为参数从非泛型方法中获取泛型参数,并在其中调用泛型方法。我们可以从 'dyn Any 中检查 TypeId,但我们不能从 'TypeId' 中知道具体的类型。因此,宏将注入调用具有具体类型的泛型方法的函数,并根据 TypeId 调用这些函数。但你应该知道这种方法不是很高效。


请阅读此crate的Rust文档以获取更多详细信息。

依赖项

~1–1.6MB
~29K SLoC