rust - 您可以存储可用于访问 AnyMap 的任意类型吗?

标签 rust

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

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

最佳答案

按照评论中的建议,我会查看 core::any::TypeId .

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

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

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

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

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

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

关于rust - 您可以存储可用于访问 AnyMap 的任意类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54770222/

相关文章:

arrays - 如何动态设置 Rust 数组长度?

rust - 如何将 'None' 值传递给 Rust 中的异步函数

generics - 解决特征实现冲突

postgresql - DateTime<Utc> 编译但不编译 DateTime<Local> 查询表,该表的列定义为带有时区的时间戳

rust - 我如何从 Box<Any> 向下转换为特征对象类型?

enums - 在宏中匹配类似元组的枚举变量,其中枚举类型和变量是元变量: how do I write the matching pattern?

rust - 如何在 Rust 中按值传递装箱的 trait 对象?

rust - 使用 to_string 是按行读取文件并按空格分割的最干净的方法吗?

rust - 如何使返回 XMLError 的方法与 anyhow::Error 兼容?

rust - 不能将 Any 向下转换为包含引用的数组