gpt4 book ai didi

generics - Rust 中通用结构的向量

转载 作者:行者123 更新时间:2023-11-29 07:48:15 25 4
gpt4 key购买 nike

我正在用 Rust 创建一个实体组件系统,我希望能够为每个不同的 Component 类型存储组件的 Vec:

pub trait Component {}

struct ComponentList<T: Component> {
components: Vec<T>,
}

是否可以创建这些 ComponentList 的集合?

struct ComponentManager {
component_lists: Vec<ComponentList<_>>, // This does not work
}

这是为了更快地检索特定 Component 类型的列表,因为特定类型组件的所有实例都在同一个 ComponentList 中。

最佳答案

创建一个特征,每个 ComponentList<T>将实现,但会隐藏 T .在该特征中,定义您需要对组件列表进行操作的任何方法(您将无法使用 T ,当然,您必须使用像 &Component 这样的特征对象)。

trait AnyComponentList {
// Add any necessary methods here
}

impl<T: Component> AnyComponentList for ComponentList<T> {
// Implement methods here
}

struct ComponentManager {
component_lists: Vec<Box<AnyComponentList>>,
}

如果您想高效地查找 ComponentList<T>基于 T来自 ComponentManager , 你可能想看看 anymap typemap 反而。 anymap提供一个由类型键控的简单映射(即您使用类型 T 作为键并存储/检索类型 T 的值)。 typemap概括anymap通过 K 类型的关联键具有 K::Value 类型的值.

关于generics - Rust 中通用结构的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40064700/

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