Шаблон std::iterator_traits
класс определяет 5 вложенных типов: iterator_category
, value_type
, difference_type
, pointer
и reference
. Сидя в источники <algorithm>
заголовка как LIBC++ и libstdC++, можно увидеть множество применений value_type
, difference_type
и iterator_category
, но только один для reference
(внутри std::iter_swap
) и ни для pointer
.Что такое тип вложенного указателя в iterator_traits?
В моем приложении используется ссылка на прокси-итератор прокси-сервера, созданная вручную. Я хочу перейти на использование Boost iterator_facade
, который позволяет мне настроить ссылочный тип по умолчанию T&
на произвольный тип, но не так для типа указателя, который по умолчанию равен T*
. Я хочу избежать укусов каким-то глубоко скрытым использованием вложенного типа pointer
.
Примечание: итератор является прокси для встроенного типа без вложенных элементов, так что я не нужна совместимость с operator->
(для которых тип возвращаемого будет pointer
).
Вопрос: какая польза случаев есть в стандартной библиотеке для вложенного типа pointer
внутри iterator_traits
?
Я не нашел использования в исходном SGI STL или в стандарте C++. Возможно, это средство для использования пользователем языка, а не стандартная библиотека. – Rapptz
Вы можете найти его объявленный тип интересным в итераторе, который имеет тип шаблона, специализируется на '' Он по-прежнему 'T *', но 'T' везде еще теряет' * '. –
WhozCraig
@WhozCraig tnx хорошая точка, но если бы я просто объявлял 'using pointer = void' для моего собственного итератора, где можно было бы укусить? – TemplateRex