模板特例化

  1. 函数模板特例化:
    当我们特例化一个函数模板时,必须为原模版中的每个模板参数都提供实参。如下:
template<typename T,typename T1>
void f1(T &a,T1& a)
{}
template<>void f1(int &a,double &b){}//函数模板实例化
  1. 类模板特例化
    类模板特例化时不用为全部模板参数提供实参,即类模板部分特例化。也可以特例化成员而不是整个类。
    特例化的类模板必须与原始模板定义在同一个命名空间中,如下:

① 指定类模板的所有参数,即整个模板类都特例化

namespace n1
{
	template<typename T1,typename T2>
	class c1
	{
		public:
			c1(){std::cout<<"template class c1"<<endl;}
	};
}
namespace n1
{
	template<>class c1<int,int>  //指定所有模板参数
	{
		int a;
		public:
		c1();
	};
	
}
n1::c1<int,int>::c1(){}//类外定义c1<int,int>的构造函数


只实例化某个模板类的成员函数

template<>
n1::c1<int,double>::c1(){}//只实例化c1<int,double>::c1()函数,即只实例化某个成员函数,template<>可以不写

③ 类模板部分特例化

template<typename T1,typename T2>
class c1
{

};
template<typename T>
class c1<double, T>//部分特例化,即第一个参数是特定的double
{
	int a;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值