#reflection #bevy #traits #extension #object #steroids #bevy-reflect

reflect-steroids

为 bevy_reflect 添加扩展,通过任意 trait 对象实现反射

3 个不稳定版本

0.2.0 2022年8月25日
0.1.1 2022年8月12日
0.1.0 2022年8月12日

#64 in #reflection

MIT/Apache

76KB
1.5K SLoC

Bevy Reflection on Steroids

bevy_reflect 包的一系列补充扩展,该包为 Bevy 游戏引擎的部分功能提供支持。

bevy_reflect 为 Rust 结构体提供了一个通用的反射框架,并提供了对 traits 的基本支持。

亮点

  • bevy_reflect 无缝集成。
  • 包含一个全局注册类型的设施,无需显式调用 TypeRegistry::register()。此功能由 "inventory" 包的功能控制,默认启用。请参阅 enable_global_type_registration
  • 包含执行泛型动态转换的设施,填补了 Rust 语言的漏洞(类似于 C++ 的 dynamic_cast)。请参阅 Cast trait。
  • 包含类似 downcast-rs 的功能,但使用 Reflect trait 代替 Any。请参阅 DowncastReflect
  • 对不透明 trait 对象进行序列化和反序列化(类似于 typetag)。

此包提供了一种更直观、更易于用户交互的方式,通过任意 trait 对象与反射类型进行交互。

通过为 dyn MyTrait 实现 DynamicTrait,使得该类型的所有动态特征对象引用都可以使用反射功能。唯一的要求是该特征具有 DowncastReflect 作为超特征,并且在代码中存在对宏 impl_dynamic_trait!(MyTrait, ReflectMyTrait) 的调用。

依赖项

~3–10MB
~101K SLoC