Class Template

클래스 템플릿 정의 위치

컴파일러가 Stack<int> 같은 구체 타입을 만들려면 멤버 함수 정의까지 볼 수 있어야 하므로 보통 헤더에 함께 둡니다.

선언 분리일반 클래스처럼 .cpp로 숨기면 필요한 타입 인스턴스가 안 보일 수 있습니다.
인수 종류타입 매개변수와 비타입 매개변수의 컴파일 시점 값을 구분합니다.
T

저장 타입을 일반화합니다

Array<T>는 원소 타입만 바꾸고 같은 자료구조 규칙을 재사용합니다.

N

크기를 값으로 받습니다

Buffer<T, N>N은 런타임 변수가 아니라 컴파일 시점 상수입니다.

spec

예외 타입만 분리합니다

특수화는 일반 규칙으로 설명되지 않는 타입에만 좁게 사용합니다.

권장 배치선언과 정의를 같은 헤더에 두어 모든 번역 단위가 볼 수 있게 합니다.
오류 신호링커가 특정 Stack<T> 멤버 정의를 찾지 못합니다.
명시 인스턴스쓸 타입이 고정된 라이브러리에서는 별도 전략으로 빌드 시간을 줄일 수 있습니다.

타입별 생성 클래스 템플릿은 “클래스 하나”가 아니라 타입 인수별 클래스를 찍어 내는 설계도입니다.