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