Page 154

12장에서는 클래스와 함수 템플릿을 널리 사용하는 기능 위주로 살펴봤다. 표준 라이브러리의 내부 작동 방식을 파악할 수 있거나 간단한 클래스를 직접 정의할 수 있을 정도로만 템플릿을 이 해하고 싶은 독자는 고급 템플릿을 소개하는 이 장을 건너뛰어도 좋다. 하지만 템플릿의 세부사 항과 한계를 알고 싶다면 이 장에서 소개하는 좀 어렵지만 매력적인 내용이 도움 될 것이다.

22.1 템플릿 매개변수에 대한 심화 학습 템플릿 매개변수의 종류를 세부적으로 살펴보면 타입, 비타입, 템플릿 템플릿(오타가 아니다. 원래 이름이다.)의 세 가지가 있다. 지금까지 나온 예제는 12장에서 설명한 타입 템플릿 매개변 수와 비타입 템플릿 매개변수만 사용했다. 템플릿 템플릿 매개변수는 사용한 적이 없다. 그런데 타입과 비타입 템플릿 매개변수에는 12장에서 설명하지 않은 주의사항이 몇 가지 있다. 이 절 에서는 세 가지 템플릿 매개변수를 좀 더 깊이 있게 살펴본다.

22.1.1 템플릿 타입 매개변수에 대한 심화 학습 템플릿을 사용하는 주 목적은 템플릿 타입 매개변수를 사용하는 데 있다. 타입 매개변수는 원하 는 만큼 얼마든지 많이 선언할 수 있다. 예를 들어 12장에서 소개한 Grid 템플릿에 두 번째 매 개변수로 다른 클래스 템플릿 컨테이너에 대한 타입 매개변수를 추가해서 그 컨테이너로 그리드 를 만들 수 있게 수정할 수 있다. 표준 라이브러리는 vector와 deque을 비롯한 다양한 클래스 템플릿 컨테이너를 제공한다. 12장에서 정의한 Grid 클래스는 그리드의 원소를 저장하기 위 해 vector에 대한 vector를 사용했다. 그런데 그리드를 deque에 대한 vector로 구현하고 싶 을 수도 있다. 이럴 때는 템플릿 타입 매개변수를 추가하는 방식으로 사용자가 내부 컨테이너로 vector를 사용할지 아니면 deque을 사용할지 선택하게 만들 수 있다. Grid에 이러한 템플릿

매개변수를 추가하려면 다음과 같이 작성한다. template <typename T, typename Container> class Grid { public: explicit Grid(size_t width = kDefaultWidth, size_t height = kDefaultHeight); virtual ~Grid() = default;

1074 4부 C++ 고급 기능 마스터하기

Profile for 한빛미디어

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

Advertisement