【发布时间】:2016-10-15 22:04:48
【问题描述】:
我正在用 Rust 创建一个实体组件系统,我希望能够为每个不同的 Component 类型存储一个 Vec 组件:
pub trait Component {}
struct ComponentList<T: Component> {
components: Vec<T>,
}
是否可以创建这些ComponentLists 的集合?
struct ComponentManager {
component_lists: Vec<ComponentList<_>>, // This does not work
}
这是为了加快检索特定Component 类型的列表,因为特定类型组件的所有实例都将在同一个ComponentList 中。
【问题讨论】:
-
您的意思是
Vec<ComponentList<C>>,其中C: Component是整个向量的同一个类,还是Vec<ComponentList<c>>代表每个组件类型c? -
我的意思是每个
impl和Component(后者)都有一个Vec<ComponentList<c>> -
在这种情况下,您需要为结构中的每个实现保留一个属性,或者拥有一个具有动态调度的向量(如下面的第一个答案所示)。
-
你认为你能澄清我将如何准确地为每个实现保留一个属性吗?
-
struct ComponentManager { component1: Component1, component2: Component2, ... }