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