클래스 템플릿

클래스 템플릿은 자료구조의 모양과 타입을 분리합니다

스택, Pair, 컨테이너처럼 동작은 같고 저장 타입만 바뀐다면 클래스 전체를 복사하지 말고 타입 매개변수로 일반화합니다.

타입 매개변수

템플릿 타입 사용

T, KeyType, ValueType처럼 템플릿 인자의 역할이 이름에서 바로 읽혀야 합니다.

비타입 매개변수

크기나 정책 값을 컴파일 시점 상수로 고정합니다

FixedSizeStack<T, MAX_SIZE>는 배열 크기를 타입의 일부로 만듭니다.

정의 위치

멤버 함수 정의가 인스턴스화 지점에서 보여야 합니다

그래서 클래스 템플릿은 보통 선언과 구현을 헤더에 함께 둡니다.

인스턴스화

사용한 타입 조합만 구체 클래스로 만들어집니다

Pair<int, double>Pair<string, char>는 별도 버전입니다.

중첩 조합

템플릿 중첩 인자

Pair<int, Pair<string, double>>처럼 구조를 합성합니다.

특수화 예고

타입별 저장 특수화

기본 구현으로 충분한지 먼저 보고 예외만 특수화합니다.

중복 감소

자료구조 로직은 하나, 저장 타입은 호출 지점에서 결정됩니다.

인터페이스 일관성

push, pop, get 같은 멤버 의미를 타입별로 유지합니다.

링커 오류 방지

정의를 숨긴 채 새 타입 조합을 쓰면 필요한 코드를 만들 수 없습니다.