类模板的偏特化

Class templates 可以被偏特化(partial specialized,或称部份特化、局部特化)。这使你得以在特定情形下使用特殊实作码,但仍然留给你(使用者)选择  template parameters 的能力。

例如对于下面的  class template: 

template <typename T1, typename T2> 
class MyClass { 
... 

}; 


以下数种形式的偏特化都是合理的: 
//  偏特化:两个  template parameter  相同 
template <typename T> 
class MyClass<T,T> { 
... 
}; 
 

//  偏特化:第二个类型为 int 

template <typename T> 

class MyClass<T,int> { 

... 
}; 
 
//  偏特化:两个  template parameter  均为指针类型  
template <typename T1, typename T2> 
class MyClass<T1*, T2*> { 
... 
}; 
 
以下例子示范,下列各种声明语句将使用上述哪一个  class template: 
MyClass<int,float> mif; //  使用  MyClass<T1,T2> 
MyClass<float,float> mff; //  使用  MyClass<T,T> 
MyClass<float,int> mfi; //  使用  MyClass<T,int> 
MyClass<int*,float*> mp; //  使用 MyClass<T1*,T2*> 
 

如果某个声明语句与两个(或更多)偏特化版本产生同等的匹配程度,这个声明语句便被视为模棱两可(歧义):

 

MyClass<int,int> m; //  错误:同时匹配  MyClass<T,T>  和  MyClass<T,int> 
MyClass<int*,int*> m; //  错误:同时匹配  MyClass<T,T>  和  MyClass<T1*,T2*> 
 
为解除上述第二声明的歧义性,你可以针对「指向相同类型」的指针,提供另一个偏特化版本: 
template <typename T> 
class MyClass<T*,T*> { 
... 
}; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值