按类型查找对象vs字符串

时间:2017-08-05 15:20:43

标签: c++ components game-engine

我有一个抽象的组件类和一个带有一个充满组件的向量的实体类(派生的可能性)。我希望能够查找组件。按类型或字符串查找它们会更好吗?

ComponentA* component = entity.getComponent<ComponentA>();
// vs
ComponentA* component = entity.getComponent( "ComponentA" );

在这两个实例中,我都需要一个vtable,但只有在后面我需要为每个派生类实现某种getName函数。

1 个答案:

答案 0 :(得分:1)

考虑这个声明:

template<typename T>
T * getComponent();

不同的T s,不同的返回类型,您可以将返回的值直接分配给正确类型的变量。
它可以工作。到目前为止一切都很好。

现在考虑一下这个声明:

?? getComponent(std::string);

如果你愿意,可以选择这个:

?? getComponent (const char *);

返回类型应该是什么?您可以做的最好的事情是使用组件的公共基类(如果存在)并且每次都在调用者的上下文中将其强制转换。我无法想象实际上有什么更令人烦恼的事 你可以使用它的另一种方法是返回void *,但我不鼓励它 您甚至可以添加第二个参数,该参数是您向其传递正确类型的可调用对象(重载operator()或使其成为模板),但它会使调用点处的所有内容更加混乱。
否则,您可以将您的功能设为模板,直接在呼叫点设置返回类型,但是......等等......我们是否转向第一种情况?添加模板参数,删除函数参数,它现在是多余的,你得到的是:

template<typename T>
T * getComponent();

我说这已经足以决定什么是最好的选择。

相关问题