我正在 Rust 中创建一个实体组件系统,并且我希望能够存储Vec
每个不同的组件Component
type:
pub trait Component {}
struct ComponentList<T: Component> {
components: Vec<T>,
}
是否可以创建这些的集合ComponentList
s?
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 or typemap反而。anymap
提供一个由类型键控的简单映射(即您使用类型T
作为键并存储/检索类型的值T
). typemap
概括anymap
通过类型的关联键K
具有类型值K::Value
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)