// 클래스 template의 기본.
template <typename T> class Stack
{
T* buf;
public:
Stack() {} // 1. ok. 생성자이름은클래스이름
//Stack<T>() {} // 2. 에러
// 복사생성자의모양
Stack( const Stack<T>& ) {}
void push ( T a );
};
// 클래스template의멤버함수를외부에구현하려면
template<typename T> void Stack<T>::push( T a )
{
}
void main()
{
Stack<int> s1;
// Stack s2; // error. Stack template의이름이지Type이아니다.
// type은Stack<T> 이다.
}
// 멤버 함수 template를 활용해보자.!!!
template<typename T> class Stack
{
public:
Stack(){}
template<typename U> explicit Stack(const Stack<U>&)
{
}
explicit Stack(const Stack<T>&)
{
}
};
void main()
{
Stack<int> s1;
Stack<int> s2(s1);
Stack<int> s3;
Stack<double> s4(s3);
}