#include <iostream>
#include <vector>
using namespace std;
// template 파라미터의종류
// 1. type
// 2. 상수( 정수와포인터상수만가능) 파라미터.
// 3. template temlpate 파라미터- template 이름을 넘긴다???
// vector는 디폴트 인자가3 개가 있으므로 넘기기 힘들다.
// 그래서 새롭게 만든 template를 넘겨보자!! VECTOR
template<typename T> class VECTOR
{
};
template<template<typename> class A, typename T> class Stack
{
A<T> v;
public:
};
int main()
{
Stack<VECTOR, int> s;
return 0;
}
////////////////////////////////////////////////////////////////////
template <typename T, int n, template<typename> class A> class Stack
{
A<T> v; // 결국 vector<int> v
T buf[n]; // 배열첨자에 템플릿인자 상수는 가능하다.
};
void main()
{
vector<int> a;
vector b;
Stack<int, 10, vector> s;
int n = 10;
//Stack<int, n> s2; // error
}
////////////////////////////////////////////////////////////////////
// 클래스template 2
typedef vector<vector<int> > Matrix;
void main()
{
//vector<vector<int> > m(3, 3);
Matrix m(3, 3);
m[0][0] = 10;
vector<int> v(10, 3);
v[0] = 10;
}
////////////////////////////////////////////////////////////////////
template<typename T> class Stack
{
};
void main()
{
Stack<int> s;
Stack<Stack<int> > s2; // >> 와 혼동 되지 않도록 해야 한다.
}