더북(TheBook)

2.7.2 STL 접근 방식

iterator_traits 템플릿 타입은 iterator 헤더에 정의되어 있다. 이 템플릿은 반복자 타입의 특징을 정의한 타입 별칭을 정의한다. iterator_traits는 앞 절에서 설명한 어려운 문제를 해결하는 핵심이고, 알고리즘이 반복자뿐 아니라 일반 포인터와도 동작하게 해주는 핵심이다. iterator_traits 템플릿 정의는 다음과 같다.

template<class Iterator>
struct iterator_traits
{
  typedef typename Iterator::difference_type   difference_type;
  typedef typename Iterator::value_type        value_type;
  typedef typename Iterator::pointer           pointer;
  typedef typename Iterator::reference         reference;
  typedef typename Iterator::iterator_category iterator_category;
};

struct는 멤버의 기본 접근자가 public이라는 점만 제외하면 class와 본질적으로 같다는 것을 기억하길 바란다. 이 struct 템플릿에는 데이터 멤버도 없고 함수 멤버도 없다. iterator_traits 템플릿은 타입 별칭에 대한 정의만 담고 있다. 이 템플릿은 타입 별칭 이름과 타입 사이에 매핑만 정의하고 있다. 즉, difference_type, value_type 같은 타입 별칭 이름과 Iterator에 지정된 인수 타입 같은 반복자 템플릿 인스턴스 생성에 사용된 타입 사이의 매핑만 정의한 것이다. 따라서 구체 클래스 Boggle을 예로 설명하자면 iterator_traits<Boggle> 인스턴스는 Boggle::difference_type에 대해서는 difference_type을 별칭으로 정의하고, Boggle::value_type에 대해서는 value_type을 별칭으로 정의하는 식이다.

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