gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:32:02 26 4
gpt4 key购买 nike

我正在尝试编写一个库,允许实现者将任意类型的单个实例添加到类似类型实例的列表中。我希望实现者能够按类型检索此实例。例如: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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com