нормально считалось?
Иметь vector<std::unique_ptr<Base>>
Подождите, а как же принцип постановки Лисков?
Об чем ты, пришелец?
Ну вот есть у меня класс Фрукт и есть класс Банан. Почему я не могу скастить конкретный банан во фрукт?
а в чем проблема? проблема же в векторе, нельзя подставить vector<Derived> вместо vector<Base>
поля класса-наследника потеряются
Массив бананов не является наследником массива фруктов
Ну это нормально, ожидаемо
Тогда массив никак скастить не получится? Нужно будет ручками, в цикле каждый банан кастить во фрукт и добавлять в массив фруктов?
Да, и получишь срезку каждого банана до фрукта, все данные банана пропадут
Вот здесь тебе уже показали, как правильно хранить коллекцию фруктов без потери информации о наследнике
https://isocpp.org/wiki/faq/containers#container-ptr-conversion есть тут немного интуиции, хотя можно было бы теоретически конвертировать вектор константных указателей
rust, например, более современный, и там ковариантность лучше продумана. Там можно передать массив константных указателей на конкретный тип туда, где ждут массив указателей на базовый класс (ну, только в терминах Раста) https://godbolt.org/z/EcqhneMn1
Надо объявить массив Base*[50] И заполнить его адресами каждого Derived из массива derivs. Потом уже с массивом указателей на Base можно работать
Начитаются всякого говна...
Обсуждают сегодня