Информация об изменениях

Сообщение Re[7]: Приведение типов итераторов для контейнера с базовым от 17.01.2024 10:00

Изменено 17.01.2024 10:06 rg45

Re[7]: Приведение типов итераторов для контейнера с базовым
Здравствуйте, drVanо, Вы писали:

V>Можно какой-нибудь простой пример такого адаптора к std::vector<std::unique_ptr<T>>?


В дополнение к высказанному. Адаптеры можно писать не только для итераторов, но и для целых контейнеров. Можно, например, написать обобщенный шаблонный адаптор для std::vector и поддержать в нем ковариантность (типа CovariantVector). Тогда каждый такой контейнер будет автоматом являться и контейнером элементов базовых классов. Можно пойди еще дальше и сделать еще более обобщенный шаблон, который можно будет использовать не только с вектором, но и с другими контейнерами, типа того как это сделано в std::queue и std::stack. Правда, здесь возникают некоторые вопросы с принципом Лисков, возможно, именно поэтому такие адапторы отсутствуют в стандартной библиотеке, но как частное решение для собственных нужд, это может иметь право на существование.
Re[7]: Приведение типов итераторов для контейнера с базовым
Здравствуйте, drVanо, Вы писали:

V>Можно какой-нибудь простой пример такого адаптора к std::vector<std::unique_ptr<T>>?


В дополнение к вышесказанному. Адаптеры можно писать не только для итераторов, но и для целых контейнеров. Можно, например, написать обобщенный шаблонный адаптор для std::vector и поддержать в нем ковариантность (типа CovariantVector). Тогда каждый такой контейнер будет автоматом являться и контейнером элементов базовых классов. Можно пойди еще дальше и сделать еще более обобщенный шаблон, который можно будет использовать не только с вектором, но и с другими контейнерами, типа того как это сделано в std::queue и std::stack. Правда, здесь возникают некоторые вопросы с принципом Лисков, возможно, именно поэтому такие адапторы отсутствуют в стандартной библиотеке, но, как частное решение для собственных нужд, это может иметь право на существование.