итераторы похожи в этом и делают интересное исследование.
const-итераторы часто являются основой для неконстантных итераторов, и вы часто найдете приведения типа const_cast<>()
или C, используемые для отбрасывания const из базового класса с помощью методов доступа в дочернем элементе.
Edit:
Комментарий был
У меня есть итератор zip, где константный наследует от неконстантного
Как правило, это неправильная структура наследования (если вы говорите, что я думаю о вас), потому что дети не должны быть менее строгими, чем родители.
скажем, у вас был какой-то алгоритм, принимающий итератор zip, было бы целесообразно передать константный итератор неконстантному?
если у вас есть контейнер const, вы можете запросить его только у const итератора, но тогда const итератор получен из итератора, так что вы просто используете функции родительского элемента, чтобы иметь неконстантный доступ.
Вот краткий план предполагаемого наследования по традиционной модели stl
class ConstIterator:
public std::_Bidit< myType, int, const myType *, const mType & >
{
reference operator*() const { return m_p; }
}
class Iterator : public ConstIterator
{
typedef ConstIterator _Mybase;
// overide the types provided by ConstIterator
typedef myType * pointer;
typedef myType & reference;
reference operator*() const
{
return ((reference)**(_Mybase *)this);
}
}
typedef std::reverse_iterator<ConstIterator> ConstReverseIterator;
typedef std::reverse_iterator<Iterator> ReverseIterator;