我正在研究实体组件系统,我希望能够使用此方法从实体中检索给定类型的组件:
template <class T>
T* Entity::getComponent()
{
for( auto i = mComponents.begin(); i != mComponents.end(); i++ )
{
if( typeid(**i) == typeid(T) )
{
return static_cast<T*>(*i);
}
}
return nullptr;
}
其中mComponents
是std::vector<Component*>
,而T
始终是Component
的派生类
但是,即使向量确实包含给定类型的元素,if语句也不会计算为true。我在做一些明显不对的事吗?我取消引用 i 两次以取消引用迭代器,然后取消引用指针,因为T只是一个类而不是指向类的指针。
答案 0 :(得分:1)
RTTI仅适用于多态类(在基类中具有虚函数的类)。
添加&#39;虚拟&#39;在基类的析构函数前面的关键字,RTTI将能够解析向量中的正确类型。