템플릿 템플릿 파라미터
반응형
템플리의 파라미터로 템플릿을 사용하는 것을 말한다.
이를 사용하는 이유는 요소의 데이터형에 대해 다시 명시해 주지
않아도 컨테이너형을 명시할 수 있는 템플릿을 선언할 수 있다는 점이다.
ex)
Stack<int, std::vector<int> > vStack;
Stack<int, std::vector> > vStack;
첫번째 줄의 샘플을 보면 내부 컨테이너형을 명시하기 위해 컨테이너형과 함께 요소의 데이터형도 다시 넘겨준다.
하지만 템플릿 템플릿 파라미터를 사용하면 두번째줄의 예와 같이 요소의 데이터형에 대해 다시 명시해주지 않아도 된다.
template <typename T,
template <typename ELEM, typename ALLOC> class CONT = std::deque > // 템플릿 템플릿 파라미터, class 키워드사용해야함.
class Stack {
private:
CONT<T, std::allocator<T> > elems; // elements
public:
void push(T const&); // push element
void pop(); // pop element
T top() const; // return top element
bool empty() const { // return whether the stack is empty
return elems.empty();
}
};
템플릿 템플릿 인자의 파라미터가 자신이 치환할 템플릿 템플릿 파라미터의 파라미터들과 정확히 일치해야만 한다.
기본값으로 초기화 되는 템플릿형의 변수를 원할때
template <typename T>
void foo()
{
T x = T();
}
와 같이 사용하면 된다.
데이터형이 파라미터화된 클래스 템플릿의 멤버가 제대로 초기화 되게 하기 위해,
멤버를 초기화 하는 초기화 함수 목록을 가지는 기본 생성자를 정의할 수도 있다.
template <typename T>
void MyClass
{
private:
T x;
public:
MyClass() : x(){}
};
'Study > Template' 카테고리의 다른 글
인스턴스화와 특수화 (0) | 2010.07.06 |
---|---|
함수 템플릿에 문자열 리터럴을 인자로 사용. (0) | 2010.07.02 |
데이터형이 아닌 클래스 템플릿 파라미터 (2) | 2010.06.25 |
기본 템플릿 인자 (0) | 2010.06.25 |
클래스 템플릿 특수화 (0) | 2010.06.24 |
TAGS.