【发布时间】:2011-08-19 18:24:36
【问题描述】:
我有这样的课:
class Component1 {...};
class Component2 {...};
class Component3 {...};
class Entity
{
Component1 c1;
Component2 c2;
Component3 c3;
public:
Component1& get_c1() { return c1;}
Component2& get_c2() { return c2;}
Component3& get_c3() { return c3;}
};
基本上,实体是所有可能类型的组件的容器(也包含其他东西)。我的问题是我有超过 15 个不同的组件,我不喜欢以这种方式复制和粘贴行。 我正在寻找类似的东西:
myEntity.get<Component1>();
获取我需要的组件。我看了一下 boost::tuple ,它很酷,但它允许使用整数作为键进行访问。我可以在每个 Component* 类中使用一个公共静态常量整数并像这样获得访问权限:
myEntity.get<Component1::id>();
但是我必须确保为每个组件使用不同的 ID,这不利于维护。
有没有办法使用魔法(即模板)将类型“映射”到该类型的值,以便
myEntity.get<Component1>() 按预期工作?
我还希望拥有对组件的 O(1) 访问权限,因为 myEntity::get<T> 经常被使用(并不是说 15-20 个组件无论如何谈论复杂性是有意义的)但这不是强制性的。
【问题讨论】:
-
也许如果您描述的是您的实际问题,而不是您想象的解决方案,我们可以提供更多帮助。