Re: Полиморфный итератор на базе итераторов STL
От: _Dreamer Россия  
Дата: 18.11.09 04:17
Оценка:
Здравствуйте, Vain, Вы писали:

V>Надо мне было сделать полиморфный итератор, т.е. чистый интерфейс для итератора, т.к. типы которые итерируются — неизвестны на стадии компиляции. Интерфейс примерно такой:

V>Можно ли как-нибудь обойтись без этого m_asForward? Почему итераторы для двунаправленных контейнеров — однонаправленные?

подождите. Вы хотите начинать итерирование как с конца, так и сначала, и осуществлять его в обоих направлениях, так?
для того, чтобы начать, нужно знать, откуда, и эта информация у метода start есть.
для того, чтобы совершить итерацию, нужно знать, в какую сторону, и эта информация у метода step тоже есть.

теперь нужно выяснить, какова логика метода done.
варианта здесь я вижу 2 —
1. done() == true при достижении последнего элемента при старте с первого(и наоборот, первого при старте с последнего)
2. done() == true при невозможности итерироваться в сторону, в которую была совершена последняя итерация ( как это сделано у Вас, если раскомментировать обращения к m_asForward, обратите внимание, если на самом деле нужно другое )

и в обоих случаях, нужно знать, а что же является последним элементом для текущего процесса итерации.
на мой взгляд, простейшим вариантом как раз и будет флаг направления, можно конечно и итератор на последний элемент хранить, либо даже функтор, возвращающий итератор на последний элемент.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.