从基类转换为子类时,dynamic_cast失败

时间:2015-06-09 13:41:29

标签: c++ dynamic-cast

我有一个结构

struct foo : public std::map<std::string, int>
{
};

和子结构;

struct bar : public foo
{
    int another_member;
}

但是我不能使用bar* b = dynamic_cast<bar*>(f),其中f是指向foo的指针。

即使我将foo重构为

struct foo
{
     std::map<std::string, int> m;
};

我还有问题。我玩过我的RTTI设置无济于事。到底是怎么回事?

错误是:

  

错误C2683:'dynamic_cast':'Credit :: WaterfallSimulationResult'是   不是多态类型

1 个答案:

答案 0 :(得分:8)

dynamic_cast仅适用于具有虚函数表的structclass的多态类型。

最好的办法是在你的基础struct中引入一个虚函数,引入的最佳函数是虚拟析构函数,无论如何这可能是件好事:

struct foo
{
     std::map<std::string, int> m;
     virtual ~foo(){};
};

请注意,这会强制您使用foo的“重构”形式:STL容器不能用作基类。