오버로딩 (함수 템플릿)
템플릿함수도 같은이름의 함수를 여러개 쓰는 오버로딩이 가능하다.
아래의 예를 보면 같은 이름으로 오버로딩된 템플릿 함수들과 일반 함수를 볼 수 있다.
inline int const& max(int const& a, int const& b)
{
return a < b ? b : a;
}
template<typename T>
inline T const& max(T const& a, T const& b)
{
return a < b ? b : a;
}
template<typename T>
inline T const& max(T const& a, T const& b, T const& c)
{
return ::max(::max(a,b), c); // int, int일 경우 가장 위의 nontemplete호출.
}
int _tmain(int argc, _TCHAR* argv[])
{
max(1,2,3); // 3개인자 템플릿 - int, int이므로 2개인자 not 템플릿
max(1.2, 3.4); // 2개인자 템플릿
max('a', 'b'); // 2개인자 템플릿
max(5, 3); // non template (템플릿과 같이있다면 notemplate가 우선시 된다)
max<>(5, 3); // <>때문에 템플릿으로 간주된다.
max<double>(5, 21); // 2개인자 템플릿
max('a', 2); // non template
return 0;
}
항상 함수가 호출되기전에 해당 함수의 모든 오버로딩 버전이 선어돼어 있는지를 체크해야 한다.
'Study > Template' 카테고리의 다른 글
데이터형이 아닌 클래스 템플릿 파라미터 (2) | 2010.06.25 |
---|---|
기본 템플릿 인자 (0) | 2010.06.25 |
클래스 템플릿 특수화 (0) | 2010.06.24 |
클래스 템플릿 (0) | 2010.06.18 |
인자추론 (0) | 2010.06.17 |