类模版的实例化过程
定义类模版后,再定义类模版的对象具体过程为
1。编译程序将类模版实例化成模版类,
2。在运行时实例化成对象。
比如
template<typename T,int n>class Array{
public:
Array();
~Array();
protected:
int size;
T* element;
};
template<typename T,int n>Array<T,n>::Array(){
if(n>1)size=n;
else size=1;
element=new T[size];
}
template<typename T,int n>Array<T,n>::~Array(){
delete [] element;
}
书上说编译器将定义语句Array<int ,5> intary;编译后,实际生成如下类
public:
Array();
~Array();
protected:
int size;
T* element;
};
我的问题是:n怎么不见了呢?运行时到哪儿去找n呢,也就是当类模版存在非类型参数时,到底如何编译的,编译器
如何处理非类型参数生成的,生成的模版类的形式是怎样的。
如果是生成如下形式
public:
Array(int n=5);
~Array();
protected:
int size;
T* element;
};
好像也有问题,这样岂不是定义对象要提供初值了,类模版中的构造函数并不需要初值啊