데이터형이 아닌 클래스 템플릿 파라미터
반응형
인자로 넘겨받는 것이 반드시 데이터형일 필요는 없다.
아래와 같이 일반적인 값을 입력받아도 되고, 이전글처럼 디폴트값도 지정해 줄 수 있다.
// 스택크기를 사용자로부터 입력받는다.
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'과(와) 맞지 않는 형식입니다.
아래와 같이 일반적인 값을 입력받아도 되고, 이전글처럼 디폴트값도 지정해 줄 수 있다.
// 스택크기를 사용자로부터 입력받는다.
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.