尝试对基类指针列表中的子类指针执行dynamic_cast。
这是层次结构:
class Base{};
class SubA : public Base{};
class SubB : public Base{};
然后我有另一个类来保存基本类型的列表:
class Container
{
private :
list<Base*> items;
public:
template<typename T> T* GetItem()
{
list<Base*>::iterator it;
for (it = items.begin(); it != items.end(); ++it)
{
if (dynamic_cast<const T*>(*it) != nullptr)
{
return (T*)(*it);
}
}
return NULL;
}
};
重点是:
SubA * sub = container->GetItem<SubA>();
我将获得列表中第一个找到的该类型的项目。我没有收到任何错误,只是条件不成立。
我认为你需要一个虚拟课程。如果类的任何方法是虚拟的,该类将存储有关其自身的信息,它将变大 8 个字节,并且能够从 Base 转换为 SubA
尝试添加虚拟析构函数。