【发布时间】:2015-02-19 14:48:45
【问题描述】:
我想实现实体组件系统,其中每个实体都有一个组件列表。每个组件都派生自 BaseComponent 类。实体中的每个组件都是唯一的——例如,实体不可能有两个 TransformComponent 组件。我想使用 getComponent() 方法从实体快速且类型安全地访问组件:
template <typename T>
T * getComponent();
在实体中实现组件容器的最佳方式是什么?
PS:我有很多实体(大约 10-2 万个),每个实体大约有 2-3 个组件,最多 10 个。所以我担心 unordered_map 对于我的任务来说太重了。
【问题讨论】:
-
unordered_map<type_index, unique_ptr<BaseComponent>>,我猜。 -
为什么需要知道具体的子组件类型?为什么不能使用
BaseComponent中的(可能是抽象的)接口? -
我想过。但是我有很多实体(大约 10-20 千),每个实体大约有 2-3 个组件,最多 10 个。 unordered_map 对于这个任务来说是不是太重量级的解决方案了?
-
To Mark:我需要对实体进行大量转换,因为某些组件位于实体内部并编辑这些组件
-
在宣布
unordered_map版本“太重量级”之前,您是否实际测量过它的性能?有序版本或排序向量也是可能的选项。