![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Доброго времени суток...
Есть классы Base и Derived : public Base, есть класс, принимающий в конструкторе const ::std::vector<::std::shared_ptr<Base>>&, и в другом месте имеется ::std::vector<::std::shared_ptr<Derived>>. Можно ли как-нибудь по хитрому скастовать вектор смартпойнтеров с наследниками к вектору смартпойнтеров с предками? Или каким-либо образом изменить конструктор класса, который сейчас принимает вектор смартпойнтеров предков, чтобы он мог принимать и наследников? -------------------- ![]() |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
ну очевидно нужен еще один конструктор. Тока как-то нехорошо попахивает эта задача
|
|||
|
||||
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Хотелось бы, чтобы класс, принимающий вектор предков, ничего не знал о наследниках... А то если появятся другие наследники, придется добавлять еще конструкторов...
-------------------- ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
kosmonaFFFt, по сути, вектора с Наследниками не должно быть в открытом доступе..
а так, заведите функцию конвертор, принимающую один вектор и возвращающую другой.. |
|||
|
||||
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Не хотелось бы, так как создание того объекта будет происходить в цикле непонятно сколько раз... Если писать конвертер, прдется копировать данные из одного вектора в другой, что ИМХО небыстро...
-------------------- ![]() |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
фактически копирование указателей..
создавайте сразу вектор базовых.. |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
kosmonaFFFt, зачем держать вектор указателей на потомки, когда можно просто использовать указатели на базовый тип?
|
|||
|
||||
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
У потомков помимо функционала базового типа, есть еще доп. функционал, и в том месте, где потомки создаются, и где они потом будут использоваться, он нужен, а в месте промежуточной обработки нет...
-------------------- ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
одно могу сказать, у тебя проблема с архитектурой программы.
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
В общем изменил сам класс - сделал шаблонный конструктор, принимающий итераторы, а т. к. shared_ptr имеет шаблонный оператор присваивания, подходят итераторы от любых наследников...
-------------------- ![]() |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |