std::iterator_traits
클래스 템플릿은 iterator_category
, value_type
, difference_type
, pointer
및 reference
의 5 가지 중첩 유형을 정의합니다. 모두의 libC++과 된 libstdC++의 <algorithm>
헤더의 소스를 찾아, 하나는 pointer
많은 value_type
, difference_type
및 iterator_category
하지만 (std::iter_swap
내부) reference
에 대해 하나의 사용과 없음을 볼 수 있습니다.iterator_traits에서 중첩 포인터 유형을 사용하는 것은 무엇입니까?
내 응용 프로그램은 손으로 작성한 프록시 반복자/프록시 참조 쌍을 사용합니다. 나는 부스트 iterator_facade
을 사용하여 기본값 인 T&
에서 참조 유형을 임의 유형으로 구성 할 수 있지만, 포인터 유형은 기본적으로 T*
이 아닙니다. 나는 중첩 된 pointer
타입의 숨겨진 사용법에 물리는 것을 피고 싶다.
주 : 반복자가 중첩 된 멤버없이 내장 유형에 대한 프록시, 그래서 내가 (되는 반환 형식이 pointer
을 것이다) operator->
과의 호환성을 필요가 없습니다.
질문 : 중첩 된 유형 pointer
iterator_traits
의 표준 라이브러리에는 어떤 사용 사례가 있습니까? 이어야한다 나타나는 마지막 두 종류 pointer
및 iterator_traits
내부 reference
을 (주로 태그 반복자 기능에 따라 효율적인 버전 디스패치 표준 알고리즘에 의해 사용되는) 제 세 종류 iterator_category
, value_type
및 difference_type
대조적
원래 SGI STL 또는 C++ 표준에서 아무런 용도도 발견되지 않았습니다. 아마 언어 사용자가 표준 라이브러리가 아닌 그것을 사용하는 수단으로 제공되었을 것입니다. – Rapptz
템플릿 유형이 ''에 의해 특수화되어있는 iterator에서 선언 된 타입이 흥미로울 수 있습니다. 여전히 'T *'이지만 다른 모든 곳의'T '는'*'를 잃습니다. –
WhozCraig
@WhozCraig tnx 좋은 지적이지만, 만약 내 자신의 iterator에'pointer = void'를 사용한다고 선언한다면, 나는 물릴 수 있습니까? – TemplateRex