Коллеги, проконсультируйте плз.
Делаю 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 разного типа (итераторы нижележащих контейнеров).