더북(TheBook)

2.7.1.1 STL 반복자 사용의 문제

정의하려는 함수 템플릿의 매개변수가 반복자일 때 발생하는 문제는 템플릿 정의에서 사용해야 하는 모든 타입을 항상 알 수 있는 게 아니라는 것이다. 반복자를 매개변수로 갖는 swap 함수를 템플릿으로 정의한다고 해보자. 템플릿 타입 인수는 반복자 타입을 지정한다.

template <typename Iter> void my_swap(Iter a, Iter b)
{
  tmp = *a;         // 에러 - tmp 변수는 선언되지 않았다
  *a = *b;
  *b = tmp;
}

이 함수 템플릿 인스턴스의 의도는 반복자 인수로 전달된 a, b 객체를 교환(swap)하는 것이다. tmp는 무슨 타입이 되어야 할까? 이걸 알 수 있는 방법이 없다. 반복자가 가리키는 객체의 타입은 알 수 있지만, 그게 무엇인지는 알 수 없다. 왜냐하면 템플릿의 인스턴스가 생성될 때까지 결정되지 않기 때문이다. 타입을 모를 때 변수를 어떻게 정의할까? 물론, 여기에 auto를 사용할 수 있지만, 반복자의 타입이 value_type이나 difference_type인지 알아야 할 때도 있다.

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