模板全特化和偏特化的使用方式

6 篇文章 0 订阅

template<typename T1,typename T2>

class Test{

public:

      Test(T1 a,T2 b):a(a),b(b){cout<<"normal"<<endl;}

private:

      T1 a;

      T2 b;

};

//A

template<>

calss Test<char,int>{

public:

      Test(char a,int b):a(a),b(b){cout<<"full"<<endl;}

private:

      char a;

      int b;

}:

//B

template<typename T>

calss Test<T,char>{

public:

      Test(T a,char b):a(a),b(b){cout<<"partial"<<endl;}

private:

      T a;

      char b;

};

template<typename T1,typename T2>

void fun(T1 a,T2 b){cout<<"normal"<<endl;}

//C

template<>

void fun<char,int>(char a,int b){cout<<"full"<<endl;}

//D

template<typename T>

void fun<T,char>(T a,char b){cout<<"partial"<<endl;}

 

  • 模板特化是将模板中的模板参数指定为特定的类型,模板特化后可以针对特定类型实现特定逻辑,而不拘泥于通用模板。模板特化丰富了模板的使用方式。
  • 模板特化分为全特化和偏特化。模板全特化是将所有模板参数进行特化,特化后所有的模板参数都有确定的类型;偏特化是将部分模板参数进行特化,特化后只有部分模板参数指定了类型,因此模板偏特化后仍然是一个模板。
  • 程序中首先定义了一个包含两个模板参数的类模板,然后通过指定两个模板参数的类型对模板进行全特化,再通过指定其中一个模板参数的类型对模板进行偏特化,因此类模板的相关代码没有问题。
  • 之后程序定义了一个包含两个模板参数的函数模板,然后对函数模板进行全特化,再对函数模板进行偏特化。但是C++规定,函数模板只能全特化,不能偏特化,如果想实现偏特化的效果,可以通过函数重载或模板重载的方式解决。因此D段代码错误。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值