오버로딩 (함수 템플릿)

반응형

템플릿함수도 같은이름의 함수를 여러개 쓰는 오버로딩이 가능하다.
아래의 예를 보면 같은 이름으로 오버로딩된 템플릿 함수들과 일반 함수를 볼 수 있다.

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
TAGS.

Comments