인자추론

반응형

template <typename T1, typename T2>
inline T1 max(T1 const& a, T2 const& b)
{
 return a < b? b:a;
};

위의 함수는 간단히 큰 함수를 반환하는 함수이다.
이를 사용할때 조심해야 할 부분이 있다.
max(2,2,7); 을 사용하게 되면
분명 큰 수는 2.7이지만 반환값은 2가 된다.
그 이유는 반환값이 T1으로 되어있기 때문이다.
그렇다고 반환값을 T2로 할수도 없다.

이를 위한 해결로 아래와 같이 인자를 세개를 받도록 한다.
template <typename RT, typename T1, typename T2>
inline RT max(T1 const& a, T2 const& b)
{
 return a < b? b:a;
};

첫번째 인자로 반환자료형을 받는데 첫번째 인자로 둔 이유는 간단하다.
인자추론을 사용하여 사용시 간편하게 하기 위해서이다.
만약 RT가 마지막 인자라면 아래와 같이 사용해야 한다.
max<int, double, double>(2, 2.7)
하지만 RT가 첫번째 인자라면 인자추론에 의해 2와 2.7의 데이터형은 알아서 결정해 준다.
max<double>(2, 2.7)
인자추론을 적극활용하자.

'Study > Template' 카테고리의 다른 글

데이터형이 아닌 클래스 템플릿 파라미터  (2) 2010.06.25
기본 템플릿 인자  (0) 2010.06.25
클래스 템플릿 특수화  (0) 2010.06.24
클래스 템플릿  (0) 2010.06.18
오버로딩 (함수 템플릿)  (0) 2010.06.17
TAGS.

Comments