Checklist

함수 템플릿 호출은 세 가지를 동시에 읽는다

호출문 하나에서 T 추론, 명시적 인수 지정, 오버로드 선택이 함께 결정됩니다.

추론

인자가 T를 채우는가

max(10, 20)T=int로 바로 정해집니다.

명시

직접 고정해야 하는가

create_zero<double>()처럼 T를 적어야 할 때가 있습니다.

선택

어떤 후보가 이기는가

정확히 맞는 일반 함수는 템플릿 후보보다 먼저 선택될 수 있습니다.

호출 예

같은 이름이라도 선택 결과가 달라진다

호출 선택되는 후보 이유
max(10, 20) 일반 함수 int max(int,int) 정확히 일치하는 비템플릿 함수가 있음
max(3.14, 2.71) 템플릿 T=double 일반 함수 후보보다 변환이 적음
max<int>(10, 20, 30) 명시 템플릿 호출자가 템플릿 인수를 고정함
정확 일치 max(10,20) 일반 함수 변환 없음
템플릿 3.14,2.71 T = double 변환 적음
명시 max<int> 호출자가 고정 후보 확정

최종 문장

함수 템플릿은 중복을 줄이는 문법이면서, 동시에 컴파일러가 타입별 함수를 만들도록 하는 약속입니다.