1.模版类
这里我们实现一个大小比较的的模版类,如下。
template<class T>
class Myless
{
public:
bool operator()(const T& x,const T& y)
{
return x < y;
}
};
然而这样的实现方式,当传入模版参数为指针时,比较的就是指针的地址。
运行如下代码
int main()
{
int* a = new int(2);
int* b = new int(1);
Myless<int*> myless;
cout << myless(a,b);
return 0;
}
运行结果有如下两种情况 ,其原因是因为实际上meless()比较的是a与b的地址。
2.限定模版的类型
若要实现*a和*b的比较我们就可以针对指针这个宽泛的大类进行类模版的特化。
其语法如下所示:
template<class T>
class Myless<T*>
{
public:
bool operator()(T* const x, T* const y)
{
return *x < *y;
}
};
int main()
{
int* a = new int(2);
int* b = new int(1);
Myless<int*> myless;
cout << myless(a,b);
return 0;
}
这样当传入模版参数为指针如int*时T为int,此时返回值为a与b指向内容相比较的结果。
3.其他特化
上述限定模版类型是类模版特化中更可能用到的一种,类模版还可以进行某种类型特化。但但这样的特化实践中并不常用。
其语法如下:
template<class T1,class T2>
class Myless{
};
//全特化
template<>
class Myless<int,char>{
};
//偏特化
tempalate<class T>
class Myless<T,int>{
};