C++ 模板和 typeid
C++ Templates and typeid
我正在开发实体组件系统,我希望能够使用此方法从实体中检索给定类型的组件:
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
的派生 class
但是,即使向量确实包含给定类型的元素,if 语句也永远不会计算为真。我在这里做错了什么吗?我取消引用 i 两次以取消引用迭代器,然后取消引用指针,因为 T 只是一个 class 而不是指向 class.[=15 的指针=]
RTTI 仅适用于多态 classes(那些在基础 class 中具有虚函数的)。
通过在基class的析构函数前面添加'virtual'关键字,RTTI将能够解析向量中的正确类型。
我正在开发实体组件系统,我希望能够使用此方法从实体中检索给定类型的组件:
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 语句也永远不会计算为真。我在这里做错了什么吗?我取消引用 i 两次以取消引用迭代器,然后取消引用指针,因为 T 只是一个 class 而不是指向 class.[=15 的指针=]
RTTI 仅适用于多态 classes(那些在基础 class 中具有虚函数的)。
通过在基class的析构函数前面添加'virtual'关键字,RTTI将能够解析向量中的正确类型。