gpt4 book ai didi

c++ - 按类型查找对象与字符串

转载 作者:行者123 更新时间:2023-11-30 05:10:44 25 4
gpt4 key购买 nike

我有一个抽象组件类和一个实体类,其中包含一个充满组件的 vector (派生的可能性)。我希望能够查找组件。按类型还是按字符串查找它们更好?

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 *);

返回类型应该是什么?您可以做的最好的事情是使用组件的公共(public)基类(如果存在)并每次都将其转换为调用者的上下文。实际上,我无法想象还有什么比这更烦人的了。
您可以使用它的另一种方法是返回 void * 但我不鼓励这样做。
您甚至可以添加第二个参数,该参数是您传递正确类型的可调用对象(重载 operator() 或使其成为模板),但这会使调用时的一切变得更加困惑点。
否则你可以让你的函数成为一个模板,直接在调用点设置返回类型但是......等等......我们不是转向第一种情况吗?添加模板参数,删除函数参数,因为它现在是多余的,你得到的是:

template<typename T>
T * getComponent();

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

关于c++ - 按类型查找对象与字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45523488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com