Если бы я создал базовый класс с именем base
и производные классы с именем производный_1
, производный_2
и т. д. Я использую коллекцию экземпляров базового класса, затем, когда я извлек элемент и попытался использовать его, я обнаружил, что C ++ считает, что это тип базовый класс, вероятно, потому что я получил его из std :: vector
базы. Это проблема, когда я хочу использовать функции, которые существуют только для конкретного производного класса, тип которого, как я знал, был этот объект, когда я помещал его в вектор.
Я привел элемент к типу, которым он должен быть, и обнаружил, что это не сработает.
(derived_3)obj_to_be_fixed;
И вспомнил, что это указатель. После некоторой настройки это сработало.
*((derived_3*)&obj_to_be_fixed);
Это правильно, или есть, например, функция abc_cast ()
, которая делает это с меньшим беспорядком?
edit:
Мне пришлось расширить это до другой вопрос, там показаны полные решения. stackoverflow.com ... почему-полиморфные-типы-ошибка-и-очистка-вопрос