wangdamingll的博客

个人的一些学习总结

类模板的偏特化

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*> { 
... 
}; 
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangdamingll/article/details/53995834
个人分类: 模板
上一篇类模板特化
下一篇预设模板自变量
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭