按类型查找对象vs字符串
问题描述:
我有一个抽象组件类和一个向量充满组件(派生可能性)的实体类。我希望能够查找组件。按照类型或字符串查找它们会更好吗?按类型查找对象vs字符串
ComponentA* component = entity.getComponent<ComponentA>();
// vs
ComponentA* component = entity.getComponent("ComponentA");
在这两种情况下,我需要一个虚函数表,但只有在以后我会需要实现某种功能getName
为每派生类。
答
考虑这样的声明:
template<typename T>
T * getComponent();
不同T
S,不同的返回类型,您可以直接将返回的值向右类型的变量。
它可以工作。到现在为止还挺好。如果你喜欢
?? getComponent(std::string);
或者这一个:
?? getComponent (const char *);
应该是什么返回类型
现在考虑这个声明?你可以做的最好的做法是使用组件的公共基类(如果存在的话),并且每次都在调用者的上下文中进行转换。我无法想象其他事情更令人讨厌。
另一种方式可以使用它是通过返回一个void *
但我劝阻它。
您甚至可以添加第二个参数,该参数是您传递正确类型(超载operator()
或使其成为模板)的可调用对象,但它会使调用点处的所有内容更加混乱。
否则,你可以让你的函数成为一个模板,直接在返回类型上设置返回类型,但是......等等......我们不是转向第一种情况吗?添加模板参数,删除功能参数为它的现在多余的,你得到的是:
template<typename T>
T * getComponent();
我会说,这已经足够了决定什么是最好的选择。
你有'template'类型安全,你怎么知道字符串(结果)类型? – Jarod42