정수형 데이터를 저장하는 vector의 첫번째 원소를 출력하는 함수 print_first_element가 있다. 이 함수는 아마도 다음과 같이 구현되어 있을 것이다.
위의 함수를 약간 변경하면 임의의 타입 값을 저장하는 vector의 첫번째 원소를 출력하는 함수(정확히는 함수 템플릿)를 작성할 수 있다.
이제 이 함수를 vector뿐만 아니라 모든 컨테이너에 대해 적용가능한 함수로 바꾸어보자.우선 컨테이너 타입을 템플릿 타입인자로 받는다. 그러면 변형된 함수는 다음과 같은 형태를 가지게 된다.
앞의 두 함수에서는 저장되는 값의 타입이 템플릿 타입인자였다. 하지만 세번째 함수는 컨테이너의 타입이 타입 인자이다. 그러므로 원소 타입의 지정이 이전 두 함수와는 달라져야한다. 가장 대표적인 방식이 바로 value_type이다.
value_type
템플릿 기반의 모든 컨테이너는 자신이 저장하는 타입이 있다. 그런데 위의 경우처럼 이 타입을 외부에서 필요로 할 때가 있다. 그래서 C++ 표준 컨테이너 설계자는 컨테이너를 만들 때 다음과 같은 타입선언을 추가한다.
결론적으로 세번째 print_first_element의 ???에는 "컨테이너타입::value_type"이 들어가야한다. 그리고 value_type은 템플릿에 의존적인 타입이므로 typename을 명시해줘야 한다. 이를 바탕으로 세 번째 print_first_element를 다시 써보면 아래와 같다.
컨테이너가 저장하는 원소 타입을 사용하는 다른 방법
C++ 11부터는 value_type 외에도 다음과 같이 원소의 타입을 얻을 수 있다.
'NC University > Advanced C++' 카테고리의 다른 글
2일차 - Template 부분 전문화(2) (0) | 2015.06.30 |
---|---|
2일차 - 템플릿 인자 (0) | 2015.06.30 |
2일차 - 멤버함수 템플릿 (0) | 2015.06.24 |
1일차 - new에 대해서 (0) | 2015.06.19 |
1일차 - Template meta programming (0) | 2015.06.18 |