模板参数可以是某些类型或者非类型。类型参数需用使用typename或class关键字才指定。
如下:
template<typename T1,typename T2,...> class className{...}
template<class T1, class T2,...> class className{...}
非类型的参数就是通常的参数定义,表示模板在实例化时所是用的常量。
还是以数组模板类为例子:
#includeusing namespace std;template class Array{public: Array(); ~Array(); int length() const { return m_length; } T& get(int index) const; T operator[](int index);private: T *p_array; int m_length;};template Array ::Array(): p_array(new T[len]), m_length(len){}template Array ::~Array(){ delete p_array;}template T& Array ::get(int index) const{ if (index > m_length -1) { throw "ERROR:index is out!"; } else { return p_array[index]; }}template T Array ::operator[](int index){ return p_array[index];}int main(){ Array<> intArr; cout << "the length of int array is " << intArr.length() << '\n'; try { intArr.get(11); }catch(const char *ex) { cout << ex << '\n'; } Array charArr; Array char20Arr; cout << "the length of char20 array is " << char20Arr.length() << '\n'; return 0;}