У меня есть быстрый вопрос о том, как лучше всего реализовать итераторы в следующем:
Скажем, у меня есть шаблонный базовый класс "List" и два подкласса "ListImpl1" и "ListImpl2".Основное требование базового класса - итерация, т.е. я могу сделать:
for(List<T>::iterator it = list->begin(); it != list->end(); it++){
...
}
Я также хочу разрешить добавление итератора, например:
for(List<T>::iterator it = list->begin()+5; it != list->end(); it++){
...
}
Так что проблема в том, что реализацияитератора для ListImpl1 будет отличаться от такового для ListImpl2.Я обошел это с помощью обертки ListIterator, содержащей указатель на ListIteratorImpl с подклассами ListIteratorImpl2 и ListIteratorImpl2, но все становится довольно грязно, особенно когда вам нужно реализовать operator + в ListIterator.
Есть какие-нибудь мысли по поводу лучшего дизайна, чтобы обойти эти проблемы?