더북(TheBook)

템플릿 정의에서 어떤 타입인지 모를 때 발생하는 문제를 해결하는 데 이게 어떻게 도움이 될까? 자, 우선 반복자 타입 MyIterator를 정의한다고 하자. MyIterator는 아래에 나온 타입 별칭 이름에 대한 정의를 포함한다.

difference_type - 타입이 MyIterator인 두 반복자의 간격을 결과로 하는 값 타입

value_type - MyIterator 타입의 반복자가 가리키는 값 타입

pointer - MyIterator 타입의 반복자가 표현하는 포인터 타입

reference - *MyIterator의 결과로 하는 참조 타입

iterator_category - 1장에서 소개한 반복자 카테고리 태그 클래스 타입 중에 하나로 지정. 즉, 반드시 input_iterator_tag, output_iterator_tag, forward_iterator_tag, bidirectional_iterator_tag, random_access_iterator_tag 타입 중에 하나가 되어야 한다.

STL 요구사항을 따르는 반복자 클래스는 반드시 이들 타입 별칭을 정의해야 한다. 하지만 출력 반복자는 iterator_category 별칭을 제외한 모든 별칭을 void로 정의한다. 이는 출력 반복자가 객체가 아니라 객체를 위한 대상을 가리키기 때문이다. 이들 별칭이면 반복자에 관해 알아야 할 모든 것이라 할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.