提到模板首先可能想到是以下这种类型:
template<typename T1, typename T2>
class Test
{
...
};
非类型模板参数和以上形式不一样,属于一个变种:
template <typename T, int maxsize = 200> //maxsize这个参数并不是一般形式的类型参数
class Stack
{
public:
Stack();
~Stack();
void push(T t);
T pop();
bool isEmpty();
private:
T *m_pT;
int m_maxSize;
int m_size;
};
template <typename T, int maxsize>
Stack<T, maxsize>::Stack() {
m_maxSize = maxsize;
m_size = 0;
m_pT = new T[m_maxSize];
}
template <typename T, int maxsize>
Stack<T, maxsize>::~Stack() {
delete[] m_pT;
}
template <typename T, int maxsize>
void Stack<T, maxsize>::push(T t) {
m_size++;
m_pT[m_size - 1] = t;
}
template <typename T, int maxsize>
T Stack<T, maxsize>::pop() {
T t = m_pT[m_size - 1];
m_size--;
return t;
}
template <typename T, int maxsize>
bool Stack<T, maxsize>::isEmpty() {
return m_size == 0;
}
int main()
{
int maxsize = 200;
//Stack<int, 1000> intStack;
Stack<int> intStack;
for (int i = 0; i < maxsize; i++) {
intStack.push(i);
}
while (!intStack.isEmpty()) {
printf("num:%d\n", intStack.pop());
}
return 0;
}
参考链接:
https://blog.youkuaiyun.com/q139861200/article/details/77943276