模板类的定义和模板函数的定义类似,同样是已template<typename T1,typename T2,...>的形式定义的。
举个栗子:
template<class T>
class Example
{
public:
Example()
:data(NULL)
{}
Example(const T& d)
:data(d)
{}
~Example()
{}
private:
T* data;
};
注意:在模板参数列表里面使用class和typename效果是一样的,即可以使用class来替换typaname。
同样,在调用的时候模板类直接实例化出来这个模板类的对象,和模板函数里面是一样的,模板类只是一个模板,在调用的时候才会创建出来所需要的类型的对象。
例如:
int main()
{
Example<int> a1;
Example<char> a2;
Example<string> a3;
return 0;
}
上面的代码分别创建了三个不同的类型的对象------>当模板类被调用的时候模板类就会根据所调用类型进行实例化,和模板函数的调用类似。
注:模板类和模板函数最大的区别就是在模板类里面可以将模板参数设置成带缺省的参数,但是在模板函数里面是不可以定义带缺省的参数的模板函数的。
模板类的特化:
在模板类里面同样存在的模