преобразование базового класса c ++ в производный класс беспорядок

Если бы я создал базовый класс с именем base и производные классы с именем производный_1 , производный_2 и т. д. Я использую коллекцию экземпляров базового класса, затем, когда я извлек элемент и попытался использовать его, я обнаружил, что C ++ считает, что это тип базовый класс, вероятно, потому что я получил его из std :: vector базы. Это проблема, когда я хочу использовать функции, которые существуют только для конкретного производного класса, тип которого, как я знал, был этот объект, когда я помещал его в вектор.

Я привел элемент к типу, которым он должен быть, и обнаружил, что это не сработает.

(derived_3)obj_to_be_fixed;

И вспомнил, что это указатель. После некоторой настройки это сработало.

*((derived_3*)&obj_to_be_fixed);

Это правильно, или есть, например, функция abc_cast () , которая делает это с меньшим беспорядком?

edit:

Мне пришлось расширить это до другой вопрос, там показаны полные решения. stackoverflow.com ... почему-полиморфные-типы-ошибка-и-очистка-вопрос

11
задан Community 23 May 2017 в 11:59
поделиться