按类型与字符串查找对象
Find Object By Type vs String
我有一个抽象的组件类和一个实体类,其向量充满了组件(派生的可能性(。我希望能够查找组件。按类型查找它们更好还是按字符串查找更好?
ComponentA* component = entity.getComponent<ComponentA>();
// vs
ComponentA* component = entity.getComponent( "ComponentA" );
在这两种情况下,我都需要一个 vtable,但只有在后面,我才需要为每个派生类实现某种getName
函数。
考虑以下声明:
template<typename T>
T * getComponent();
不同的T
,不同的返回类型,您可以将返回值直接分配给正确类型的变量。
它可以工作。目前为止,一切都好。
现在考虑以下声明:
?? getComponent(std::string);
或者这个,如果你愿意:
?? getComponent (const char *);
返回类型应该是什么?您能做的最好的事情是使用组件的公共基类(如果存在(,并每次在调用方的上下文中强制转换它。我无法想象还有什么比这更烦人的了。
另一种你可以使用它的方式是返回一个void *
但我不鼓励它。
您甚至可以添加第二个参数,该参数是可调用的对象,您将正确的类型传递给该对象(重载operator()
或使其成为模板(,但它会使调用点的所有内容更加混乱。
否则,您可以将函数设置为模板,直接在调用点设置返回类型,但是...等。。。我们不是转向第一种情况吗?添加模板参数,删除函数参数,因为它现在是多余的,你得到的是:
template<typename T>
T * getComponent();
我想说,这已经足以决定什么是最好的选择。
相关文章:
- 如何在 c++98 中通过特定字段在 QList 中查找对象?
- 按类型与字符串查找对象
- 查找对象属性是否位于对象向量C++中
- 查找对象向量中属性具有相同值的对象
- 在对象向量中查找对象
- C++ 在向量中查找对象并在其上调用成员函数
- C++ 在 Vector 中查找对象成员值
- 在 std 列表中查找对象并将其添加到另一个列表
- 如何在std::vector中查找对象
- OpenCV 使用具有不对应点的求解查找对象的位置
- 在向量C++中查找对象的指针
- 在 std::set 上按名称查找对象
- 在 std::set 中查找对象时出错
- 如何使用OpenCV在视频上查找对象
- 如何根据对象成员值从列表中查找对象
- 在c++中查找对象的未初始化属性
- Qt:在列表中查找对象的属性
- 在c++中,如何通过给出对象的成员来查找对象向量中的某些项
- 如何在std::vector中查找对象
- 在矢量中查找对象,具有多个要求