템플릿 클래스 헤더
template <typename T>
class Stack
{
public:
Stack();
bool isempty();
...
private:
enum {MAX = 10};
T items[MAX];
}
template <typename T>
Stack<T>::Stack()
{
...
}
template <typename T>
bool Stack<T>::isempty()
{
...
}
템플릿 클래스 사용
Stack<int> kernels;
Stack<string> kernels2;
명시적으로 어떤 데이터형을 사용할 것인지 제공해야한다.
템플릿의 융통성
template <typename T>
class Array
{
...
};
template <typename T>
class GrowArray : public Array<T> //상속
{
...
};
상속을 시킬 수 있다.
template <typename T1, typename T2 = int>
class Array
{
...
};
Array<int> //int, int
Array<int, double> //int, double
디폴트 데이터형 매개변수를 가질 수 있다.
매개변수 템플릿
template <template<typename T> typename Thing>
class Test
{
private:
Thing<int> s1;
Thing<double> s2;
...
};
int main()
{
Test<Stack> nebula;
//Stack은 template <template<typename T> typename Thing>과 일치 해야된다.
}
템플릿 클래스에 대한 바운드 템플릿 프렌드 함수
template <typename T> void report (T &); //선언
template <typename T> void counts (); //선언
template <class TT>
class HasFriend
{
friend void counts<TT> ();
friend void report<> (HasFriend<TT> &); //아래와 같은 코드이다.
//friend void report<HasFriend<TT>> (HasFriend<TT> &);
};
template <typename T>
void counts() {...} //정의
template <typename T>
void report(T & hf) {...} //정의
- 각각 데이터형에 맞는 프렌드를 얻게 된다.
- 클래스 바깥에서 선언된 템플릿의 특수화들이다.
템플릿 클래스에 대한 언바운드 템플릿 프렌드 함수
template <class TT>
class ManyFriend
{
template<typename C, typename D> friend void show2(C &, D &);
};
template <typename C, typename D> void show2(C & c, D & d)
{
...
}
int main()
{
ManyFriend<int> h1(10);
ManyFriend<int> h2(20);
show(h1, h2);
}
- 프로그램에서 show2(h1, h2)에 대한 호출은 아래와 같다.
void show2<ManyFriend<int> & ManyFriend<int> &> (ManyFriedn<int> & c, ManyFriend<int> & d);
'C++ > Basic' 카테고리의 다른 글
[C++] 내포 클래스 (0) | 2021.07.23 |
---|---|
[C++] 프렌드 클래스 (0) | 2021.07.22 |
[C++] 다중 상속과 가상 기초 클래스 (0) | 2021.07.14 |
[C++] public 다형 상속 (0) | 2021.07.06 |
[C++] 클래스의 상속 (0) | 2021.07.05 |