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;
}

其中 mComponentsstd::vector<Component*>,而 T 始终是 Component

的派生 class

但是,即使向量确实包含给定类型的元素,if 语句也永远不会计算为真。我在这里做错了什么吗?我取消引用 i 两次以取消引用迭代器,然后取消引用指针,因为 T 只是一个 class 而不是指向 class.[=15 的指针=]

RTTI 仅适用于多态 classes(那些在基础 class 中具有虚函数的)。

通过在基class的析构函数前面添加'virtual'关键字,RTTI将能够解析向量中的正确类型。