про итераторы
От: qaz77  
Дата: 27.03.20 09:00
Оценка:
Коллеги, проконсультируйте плз.

Делаю STL-совместимый самодельный контейнер, который обертка над стандартными контейнерами.
Соответственно, потребовались iterator и const_iterator.
Вопрос про то, как лучше/удобнее реализовать эту парочку, с минимумом копипасты и односторонней заменяемости от iterator к const_iterator.
Что-то я не нашел гайдлайнов для такой задачи...

Очевидно, надо сделать у const_iterator конструктор и присваивание от iterator:
class const_iterator
{
...
  const_iterator(const iterator&);
  const_iterator& operator=(const iterator&);
};

А у iterator оператор преобразования к const_iterator:
class iterator
{
...
  operator const_iterator() const;
};

Но этого недостаточно для парных операций, где первый аргумент iterator.
Пришлось добавлять:
class iterator
{
...
  difference_type operator-(const const_iterator& other) const;

  bool operator==(const const_iterator& other) const;
  // !=, <, > и т.д
};


Как-то громоздко получается и нет полной уверенности, что еще чего-то не учел.

Посмотрел, как решена задача в MS реализации STL для вектора.
Там iterator наследуют от const_iterator.
Это удобно, но в моем случае не подходит, т.к. члены данных в моих iterator и const_iterator разного типа (итераторы нижележащих контейнеров).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.