dynamic_cast 从 base 到 child class 的转换失败
dynamic_cast is failing when casting from base to child class
我有一个结构
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 设置但无济于事。这到底是怎么回事?
错误是:
error C2683: 'dynamic_cast' : 'Credit::WaterfallSimulationResult' is
not a polymorphic type
dynamic_cast
仅适用于多态类型,即具有虚函数 table.
的 struct
s 或 class
es
最好的办法是在你的基类中引入一个虚函数struct
,最好的引入函数是虚析构函数,无论如何这可以说是一件好事:
struct foo
{
std::map<std::string, int> m;
virtual ~foo(){};
};
请注意,这会强制您使用 foo
的 "refactored" 形式:STL 容器并非旨在用作基础 类。
我有一个结构
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 设置但无济于事。这到底是怎么回事?
错误是:
error C2683: 'dynamic_cast' : 'Credit::WaterfallSimulationResult' is not a polymorphic type
dynamic_cast
仅适用于多态类型,即具有虚函数 table.
struct
s 或 class
es
最好的办法是在你的基类中引入一个虚函数struct
,最好的引入函数是虚析构函数,无论如何这可以说是一件好事:
struct foo
{
std::map<std::string, int> m;
virtual ~foo(){};
};
请注意,这会强制您使用 foo
的 "refactored" 形式:STL 容器并非旨在用作基础 类。