我有一个结构
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'是 不是多态类型
答案 0 :(得分:8)
dynamic_cast
仅适用于具有虚函数表的struct
或class
的多态类型。
最好的办法是在你的基础struct
中引入一个虚函数,引入的最佳函数是虚拟析构函数,无论如何这可能是件好事:
struct foo
{
std::map<std::string, int> m;
virtual ~foo(){};
};
请注意,这会强制您使用foo
的“重构”形式:STL容器不能用作基类。