Есть ли ссылка f
, которая отображает iterator
в соответствующие const_iterator
?Получение const_iterator из итератора
I.e. f<std::vector<T>::iterator>::type
должен давать std::vector<T>::const_iterator
.
Есть ли ссылка f
, которая отображает iterator
в соответствующие const_iterator
?Получение const_iterator из итератора
I.e. f<std::vector<T>::iterator>::type
должен давать std::vector<T>::const_iterator
.
Я не знаю о таком метафоре.
Не все итераторы имеют соответствующий const_iterator. Например. insert_iterator. Таким образом, такой метафорум должен будет решить, что он собирается делать в таких случаях.
я могу думать о чем-то для reverse_iterator
: с помощью функции base
члена decltype
, можно извлечь тип возврата, чтобы вернуться к iterator
.
Однако такой функции нет для iterator
/const_iterator
, поэтому трудно понять, как это может быть достигнуто, кроме обеспечения внутреннего typedef или требующего явной специализации.
Я думаю, что общее решение вашей проблемы (и одно, которое также было бы переносимым, невозможно). По крайней мере, я не могу представить этого :-).
Сложная проблема заключается в том, что контейнер определяет тип const_iterator. Чтобы перейти к типу const_iterator для контейнера, вы должны определить тип контейнера.
Однако, если вы начинаете с типа итератора контейнера в качестве параметра metafunction, невозможно получить тип контейнера.
Для известной Т (ы), что вы хотите может быть достигнуто, однако ...
Я не думаю, что это возможно, поскольку зачастую нет четко определено отображение между типами итераторов. Например, два контейнера могут совместно использовать не-const-тип итератора, но имеют разные константные итераторы. В общем случае вы можете отображать только типы контейнеров в типы итераторов, но не между типами итераторов или от типа итератора до типа контейнера.