无法使用通用函数获取dynamic_cast

问题描述 投票:0回答:1

尝试对基类指针列表中的子类指针执行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>();

我将获得列表中第一个找到的该类型的项目。我没有收到任何错误,只是条件不成立。

c++ generics dynamic-cast
1个回答
0
投票

我认为你需要一个虚拟课程。如果类的任何方法是虚拟的,该类将存储有关其自身的信息,它将变大 8 个字节,并且能够从 Base 转换为 SubA

尝试添加虚拟析构函数。

© www.soinside.com 2019 - 2024. All rights reserved.