我正在尝试编写一个库,允许实现者将任意类型的单个实例添加到类似类型实例的列表中。我希望实现者能够按类型检索此实例。例如:list_of_types.get::<MyType>()
。
我用AnyMap
实现了这一点,但我要做的下一件事是让实现者能够定义一个类型列表,这些类型可以循环并用于访问这个AnyMap
的元素。 Rust有办法存储类型本身而不是实例吗?如果这些任意类型实现相同的特性,它会改变什么吗?有没有更好的方法来处理元素类型可访问的列表?
正如评论中所建议的,我会查看core::any::TypeId
。
我不确定你想要完成什么。根据我的理解,您希望提供类型列表并获取相关值。
我不认为Rust中有一种方法可以提供可变数量的类型参数,但我可以想到两种方法:
第一个但更困难/复杂的是你编写一个宏,它接受一个类型列表,并且对于每个提供的类型,取这个类型的值并在Vec
中累积这些值。
一个更简单的解决方案是编写一个直接获取TypeId
s数组的函数,并查找这些id的相关值并返回它们。这基本上是上述解决方案,但用户必须处理样板并获得类型'TypeId
s,因此存在更多摩擦。
还有一个名为shred的箱子,你可以用它来获得一些帮助。它包括一个类型Resources
,其中包含一些TypeId
的地图,并映射到相应类型的值。我认为这大约是你想要做的。
如果你很难实现你的项目,我建议你看一下他们如何在源代码中实现他们的Resources
类型。