Название: Тупой вопрос по касту элементов вектора. Отправлено: Racheengel от Декабрь 30, 2017, 21:21 Всем привет,
вот такая задача под Новый Год: передать в метод вектор типа std::vector<B*>, если сигнатура метода выглядит как setVector(std::vector<A*>), где A - суреркласс B. Дополнительное условие: создание временного std::vector<A*> и поэлементного копирования в него элементов не разрешено ни в каком виде (ни явно, ни неявно). Каковы идеи? Название: Re: Тупой вопрос по касту элементов вектора. Отправлено: Авварон от Декабрь 30, 2017, 21:44 Поменять сигнатуру на array_view<A> и конструировать array_view<A>(vec.data(), vec.size());
Название: Re: Тупой вопрос по касту элементов вектора. Отправлено: Igors от Декабрь 31, 2017, 07:44 Сишный каст и все дела (нечего строить из себя целку)
Название: Re: Тупой вопрос по касту элементов вектора. Отправлено: Авварон от Декабрь 31, 2017, 13:58 Почитал Гугл, мое решение с вью ничем не лучше. В общем случае, так делать нельзя, потому что указатели наследника и базового класса могут не совпадать, поэтому нужно копировать (а точнее, перевычислять адреса для каждого объекта)
Название: Re: Тупой вопрос по касту элементов вектора. Отправлено: Igors от Декабрь 31, 2017, 14:17 Да, верно, при множ наследовании адреса могут быть разные, копирование неизбежно. Нечего было возвращать вектор указателей на наследника
Название: Re: Тупой вопрос по касту элементов вектора. Отправлено: m_ax от Декабрь 31, 2017, 14:31 Продумывать нужно архитектуру перед тем как писать.
Сигнатуру метода нужно менять, чтоб он итераторы принимал: Код
Название: Re: Тупой вопрос по касту элементов вектора. Отправлено: Racheengel от Декабрь 31, 2017, 15:48 Сигнатуру метода нужно менять, чтоб он итераторы принимал: а чем это спасет то по сути? в этом варианте придется делать новую имплементацию метода setVector в классе-наследнике, по сути будет то же копирование... Название: Re: Тупой вопрос по касту элементов вектора. Отправлено: Igors от Декабрь 31, 2017, 16:18 ..по сути будет то же копирование... И чем оно здесь плохо? Часто специально заряжают именно контейнер указателей (а не самих данных) чтобы развязаться с копированием, сортировкой и др. А темплейты может есть смысл рисовать для создателя исходного вектора (чтоб мог возвращать и так и сяк)Название: Re: Тупой вопрос по касту элементов вектора. Отправлено: _Bers от Январь 07, 2018, 18:32 Сишный каст и все дела (нечего строить из себя целку) +1Название: Re: Тупой вопрос по касту элементов вектора. Отправлено: _Bers от Январь 07, 2018, 18:35 Продумывать нужно архитектуру перед тем как писать. +1Сигнатуру метода нужно менять, чтоб он итераторы принимал: Код
|