타입 자리 남김
template <typename T>
T max(T a, T b);
템플릿 정의는 설계도이고, 실제 함수는 호출에 필요한 타입이 확인된 뒤 컴파일러가 만듭니다.
template <typename T>
T max(T a, T b);
max(10, 20)
// T = int
int max(int a, int b)
// 결과 20
| 호출 | 컴파일러 판단 | 결과 |
|---|---|---|
max(3.14, 2.71) |
T = double, 비교 가능 |
double max(double,double) |
max(string("a"), string("b")) |
T = string, 문자열 비교 가능 |
"b" |
max(10, 3.14) |
T가 int/double로 갈라짐 |
컴파일 오류 |
3.14, 2.71
T = double
생성 OK
"a", "b"
T = string
결과 "b"
10, 3.14
T가 갈라짐
컴파일 오류
모든 인자가 같은 T로 맞고, 본문 연산을 그 타입이 지원합니다.
T가 모호하거나, 해당 타입에 비교 같은 필요한 연산이 없습니다.