인스턴스화 흐름

템플릿은 사용되는 순간 구체 클래스로 만들어진다

`Pair<int, double>`처럼 타입 인자를 적으면 컴파일러는 T1, T2를 실제 타입으로 바꾼 별도의 클래스 코드를 준비합니다.

01

템플릿 원형 확인

컴파일러가 클래스 틀과 멤버 함수 정의를 함께 확인합니다.

template <typename T1, typename T2>
02

타입 인자 적용

T1에는 int, T2에는 double을 대입해 필요한 버전을 고릅니다.

T1 = int
T2 = double
03

구체 클래스 생성

멤버 변수와 함수 시그니처가 실제 타입 기준으로 확정됩니다.

Pair<int,double>
04

타입 검사

생성된 클래스 기준으로 생성자 호출과 멤버 접근을 검사합니다.

p1.display()

결과: 필요한 타입 조합만 만들어진다

p1 Pair<int,double>
p2 Pair<string,char>
p3 중첩 Pair

주의할 점

템플릿 정의가 보이지 않으면 컴파일러가 새 타입 조합을 만들 수 없습니다. 그래서 클래스 템플릿 정의는 보통 헤더에 둡니다.