C ++模板和typeid

时间:2015-01-02 03:51:40

标签: c++

我正在研究实体组件系统,我希望能够使用此方法从实体中检索给定类型的组件:

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的派生类

但是,即使向量确实包含给定类型的元素,if语句也不会计算为true。我在做一些明显不对的事吗?我取消引用 i 两次以取消引用迭代器,然后取消引用指针,因为T只是一个类而不是指向类的指针。

1 个答案:

答案 0 :(得分:1)

RTTI仅适用于多态类(在基类中具有虚函数的类)。

添加&#39;虚拟&#39;在基类的析构函数前面的关键字,RTTI将能够解析向量中的正确类型。