본문 바로가기
NC University/Advanced C++

2일차 - value_type

by 날쑤 2015. 6. 29.

  정수형 데이터를 저장하는 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