模板的偏特化

模板的偏特化

一、简介

偏特化,顾名思义,将部分模板参数特化

二、两种偏特化

①个数上的偏特化

个数上的偏特化:特化部分模板参数,而保留部分模板参数

②范围上的偏特化

范围上的偏特化:可能模板参数的个数不发生变化,但使某些模板参数稍微的进一步指明类型,(比如将模板参数指定为指针类型,但不知道是什么类型的指针)

三、例子

//基础模板
template<typename T,typename E>
class ZDD{
public:
 void display(){
  printf("display<T,E>\n");
 }
};

//个数上的偏特化
template<typename T>
class ZDD<T,int>{
public:
 void display(){
  printf("display<T,int>\n");
 }
};

//范围上的偏特化
template<typename T,typename E>
class ZDD<T *,E>{
public:
 void display(){
  printf("display<T *,E>\n");
 }
};

//个数上的偏特化与范围上的偏特化
template<typename T>
class ZDD<T *,int>{
public:
 void display(){
  printf("display<T *,int>\n");
 }
};

int main(){
 ZDD<char,double> obj1;
 ZDD<char,int> obj2;
 ZDD<char *,double> obj3;
 ZDD<char *,int> obj4;
 obj1.display();
 obj2.display();
 obj3.display();
 obj4.display();
}

运行结果:
在这里插入图片描述

四、调用顺序

我们首先要知道一点:偏特化是建立在基础模板上的,实现偏特化首先要定义基础模板。

由上面的例子,我们可以看出,它的调用顺序遵循:如果实例化参数符合偏特化模板,优先调用符合模板参数个数最多的偏特化模板,如果实例化参数都不符合偏特化模板,则调用基础模板。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值