Study/Template

기본 템플릿 인자

붕대마음 2010. 6. 25. 08:59
반응형


함수에서 기본인자값을 정해주는것과 비슷하게 템플릿의 데이터형도
디폴트로 미리 정의해 줄 수 있다.
이를 기본 템플릿 인자라고 한다.
그리고 언제나 ">"을 쓸때는 ">>" 을 주의해야 한다.
괄호가 두개 겹쳐있는것이 잘못하여 시프트연산자로 인식될 수도 있기 때문이다.


#include <vector>
#include <stdexcept>

template <typename T, typename CONT = std::vector<T> >
class Stack
{
private:
 CONT vecElem;

public:
 void push(T const&);
 void pop();
 T top() const;
 bool empty() const
 {
  return vecElem.empty();
 }
};

// 두개의 템플릿 파라미터를 가지므로 멤버함수정의시 모두 명시
template <typename T, typename CONT>
void Stack<T, CONT>::push(T const& elem)
{
 vecElem.push_back(elem);
}

template <typename T, typename CONT>
void Stack<T, CONT>::pop()
{
 if(vecElem.empty())
  throw std::out_of_range("Stack pop");

 vecElem.pop_back();
}

template <typename T, typename CONT>
T Stack<T, CONT>::top() const
{
 if(vecElem.empty())
  throw std::out_of_range("Stack pop");

 return vecElem.back();
}