你能存储可用于访问AnyMap的任意类型吗?

问题描述 投票:0回答:1

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

我用AnyMap实现了这一点,但我要做的下一件事是让实现者能够定义一个类型列表,这些类型可以循环并用于访问这个AnyMap的元素。 Rust有办法存储类型本身而不是实例吗?如果这些任意类型实现相同的特性,它会改变什么吗?有没有更好的方法来处理元素类型可访问的列表?

rust
1个回答
0
投票

正如评论中所建议的,我会查看core::any::TypeId

我不确定你想要完成什么。根据我的理解,您希望提供类型列表并获取相关值。

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

第一个但更困难/复杂的是你编写一个宏,它接受一个类型列表,并且对于每个提供的类型,取这个类型的值并在Vec中累积这些值。

一个更简单的解决方案是编写一个直接获取TypeIds数组的函数,并查找这些id的相关值并返回它们。这基本上是上述解决方案,但用户必须处理样板并获得类型'TypeIds,因此存在更多摩擦。

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

如果你很难实现你的项目,我建议你看一下他们如何在源代码中实现他们的Resources类型。

© www.soinside.com 2019 - 2024. All rights reserved.