Сбой 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 ответ
dynamic_cast
будет работать только на полиморфных типах, то есть struct
с или class
Если у них есть таблица виртуальных функций.
Лучше всего внедрить виртуальную функцию в вашу базу struct
и лучшая функция для представления - это виртуальный деструктор, который, пожалуй, в любом случае полезен:
struct foo
{
std::map<std::string, int> m;
virtual ~foo(){};
};
Обратите внимание, что это заставляет вас использовать вашу "рефакторированную" форму foo
Контейнеры STL не предназначены для использования в качестве базовых классов.