데이터형이 아닌 클래스 템플릿 파라미터

반응형
인자로 넘겨받는 것이 반드시 데이터형일 필요는 없다.
아래와 같이 일반적인 값을 입력받아도 되고, 이전글처럼 디폴트값도 지정해 줄 수 있다.


// 스택크기를 사용자로부터 입력받는다.
template <typename T, int MAXSIZE = 20>
class Stack

클래스 템플릿 뿐 아니라 함수 템플릿에서도 사용이 가능하다
template<typename T, int VAL>
T addValue(T const& elem)
{
    return elem + VAL;
}

이런 종류의 함수는 파라미터로서 많이 사용된다.
std::transform(soruce.begin(), source.end(), dest.begin(), addValue<int,5>);

함수템플릿 인스턴스는 오버로딩 함수들의 집합에 대한 이름일 뿐이며
현재표준에 따르면 오버로딩함수들의 집합은 템플릿 파라미터추론에 사용될 수 없다.
따라서 함수 템플릿 인자를 정확한 데이터형으로 반환해야만 한다.
std::transform(soruce.begin(), source.end(), dest.begin(), (int(*)(int const&))addValue<int,5>);

데이터형이 아닌 템플릿 파라미터는 몇가지 제약을 가진다.
정수상수형값(또는 enum값) 이거나 외부링크를 가진 객체에 대한 포인터야 한다는 것이다.

template <typename T, double MAXSIZE = 20.3>
error C2993: 'double' : 비형식 템플릿 매개 변수 'MAXSIZE'과(와) 맞지 않는 형식입니다.

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

함수 템플릿에 문자열 리터럴을 인자로 사용.  (0) 2010.07.02
템플릿 템플릿 파라미터  (0) 2010.06.30
기본 템플릿 인자  (0) 2010.06.25
클래스 템플릿 특수화  (0) 2010.06.24
클래스 템플릿  (0) 2010.06.18
TAGS.

Comments