VALUE_TYPE 반복자 예를 들어, 대응 : 벡터 <INT> :: 그것을 반복자; 형 반복기는 * INT, 상기 대응 반복자 여기 입력 대응 int 형 지칭 실제로 ,, 즉 본원 반복 반복자 지칭 객체의 유형입니다.
때 반복자를 사용하는 것이 때로는 예를 들어, 해당 유형의 VALUE_TYPE 반복자를 사용하는 것이 필요할 수있다, 함수 사용 반복자 타입 VALUE_TYPE 반환 값이 필요할 때, 이번에는 우리는 어떻게 반복자를 구하는 반복자의 유형을 알고 VALUE_TYPE?
이 문제를 해결 STL 방법 :
STL 반복자가 정의 될 때, 문이 포함 된 반면 형 VALUE_TYPE, 즉 :
. (1) 서식 < 클래스 T>
2 구조체 반복자 {
3. VALUE_TYPE T 타입 정의; // 인라인가 VALUE_TYPE 입력 선언
. 4 T * PTR]
. 5 };
이렇게되면 다음과 유사 할 수있다 전술 한 요구를 사용 :
. (1) 서식 < 클래스 는 I>
2 유형 이름 :: VALUE_TYPE 상기 I // 반환형
3. func_exp합니다 (I ITER) {
4. 창 * ITER]
. 5 }
내가 템플릿의 유형 템플릿이 인스턴스화되기 전에, 컴파일러는 내가 무엇을 알고하지 않습니다 때문에, 형태 등의 컴파일러 I :: VALUE_TYPE에게 책임 유형 이름, 내가 모르는 :: VALUE_TYPE는 유형을 나타냅니다.
우리는 반복자를 정의하지 않기 때문에 그러나 네이티브 포인터가 반복자로, 우리는 임베디드 형 VALUE_TYPE를 선언 할 수 없습니다.
이 때 VALUE_TYPE 즉 두 개의 경우가, 기본 포인터 맞춤 반복자 반복자 클래스 타입,이를 수득하는 방법으로 얻을 수 없다.
상기 두 개의 서로 다른 상황을 해결하기 위해 부분 템플릿 특수화를 사용하여, 독립적 인 VALUE_TYPE 얻을 그리고 프로그래밍 기술을 특색를 사용, 그것은 할 수있다 :
. (1) 서식 < 클래스 는 I>
2 구조체 iterator_traits는 {
. 3 , 타입 정의는 VALUE_TYPE에게 VALUE_TYPE 상기 I :: TYPENAME
. (4) }
. 5
. 6 템플릿 < 클래스 T>를
. 7 구조체 iterator_traits <T를 *> { // 전문화 때 반복자 네이티브 포인터
8 의 T VALUE_TYPE의 형식 정의;
. 9 };
다음이 시간 VALUE_TYPE 재사용에서 인수 네이티브 포인터 문제가 VALUE_TYPE 해결 :
. (1) 서식 < 클래스 T>
2 iterator_traits <T> :: VALUE_TYPE // 반환 유형 iterator_traits VALUE_TYPE 타입을 이용하여 추정
. 3 FUNC (T ITER) {
. 4 창 * ITER]
. 5 }
특성 "특성 추출 기계"