gpt4 book ai didi

C++ 模板和 typeid

转载 作者:行者123 更新时间:2023-11-28 06:30:12 29 4
gpt4 key购买 nike

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

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

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

最佳答案

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

通过在基类的析构函数前添加“virtual”关键字,RTTI 将能够解析 vector 中的正确类型。

关于C++ 模板和 typeid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27737172/

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