избежать дублирования кода при написании итераторов и const_iterator

Я пытаюсь написать один класс итераторов, который может охватывать как const_iterator, так и классы итераторов, чтобы избежать дублирования кода.

Читая некоторые другие вопросы, я наткнулся эта почта это задает точный вопрос, который я хочу. Лучший ответ был Эта статья это объясняет, что мне нужно делать в параграфе, но ссылается на примеры в книгах, которых у меня нет. Моя попытка реализовать то, что описано, заключается в следующем:

      template<bool c=0> //determines if it is a const_iterator or not
class iterator{
typedef std::random_access_iterator_tag iterator_category;
typedef T value_type;
typedef T value_type;
typedef std::ptrdiff_t difference_type;
typedef (c ? (const T*) : (T*)) pointer; //problem line
typedef (c ? (const T&) : (T&)) reference; //problem line
public:
operator iterator<1>(){ return iterator<1>(*this) }
...
}

Я не могу понять, как использовать троичный оператор для определения typedef. Указанные строки получают ошибку компилятораОжидается ‘)’ до токена to?Я неправильно истолковываю статью?

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

3

Решение

Тернарный оператор не работает так на типах. Ты можешь использовать std::conditional вместо:

typedef typename std::conditional<c ,const T*, T*>::type pointer;
4

Другие решения

Других решений пока нет …