Подклассы здесь кажутся мне странными, но на самом деле есть проблема.
Даже если вы не хотите зависеть от частей Boost, проверьте библиотеку Boost.Iterator и, в особенности, iterator_facade
и iterator_adaptor
биты.
Существует полный пример того, как написать iterator
и const_iterator
для вашего класса, не дублируя слишком много. Их идея состоит в том, чтобы написать шаблон iterator_base
класса, который затем можно использовать для константных и неконстантных типов в строке:
template <class Value> class iterator_base;
typedef iterator_base<T> iterator;
typedef iterator_base<const T> const_iterator;
Проблема с подклассами заключается в том, что вам следует предоставить виртуальный деструктор, и вы подвергаетесь нарезке (при создании const_iterator
из iterator
)
Так что, в отличие от других здесь, я не нахожу это "хорошо".