是否可以存储可用于访问AnyMap的任意类型?

时间:2019-02-19 15:53:03

标签: rust

我正在尝试编写一个库,该库允许实现者将任意类型的单个实例添加到类似类型实例的列表中。我希望实现者能够按类型检索此实例。例如:list_of_types.get::<MyType>()

我已经通过AnyMap实现了这一目标,但是我接下来要做的是使实现者能够定义一系列类型,这些类型可以循环使用并用于访问此{{1 }}。 Rust是否可以自己存储类型而不是实例来存储类型?如果这些任意类型实现相同的特征,它会改变什么吗?有没有更好的方法来处理按元素类型可访问的列表?

1 个答案:

答案 0 :(得分:0)

根据评论中的建议,我将检出core::any::TypeId

我不确定您要完成什么。据我了解,您想提供一个类型列表并获取关联的值。

我认为Rust中没有提供可变数量的类型参数的方法,但是我可以想到两种方法:

第一个但更困难/更复杂的方法是编写一个宏,该宏接受类型列表,并且对于每种提供的类型,均采用该类型的值并将这些值累加到Vec中。

一个更简单的解决方案是编写一个函数,该函数直接获取TypeId的数组并查找这些id的关联值并返回它们。这基本上是上面的解决方案,但是用户必须照顾样板并获取类型的TypeId,以免产生更多摩擦。

还有一个名为shred的箱子,您可以用来获取帮助。它包含类型Resources,该类型包含一些TypeId的映射并映射到相应类型的值。我认为这大约是您想要做的。

如果您在实施项目时遇到困难,建议您看看他们如何在源代码中实现Resources类型。