C++类模版中限定模版参数类型

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>{

};

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值