模板的特化

模板分为类模板和函数模板,特化分为全特化和偏特化(特化是对模板的特化,因此必须存在模板才可以进行特化)

  • 全特化:给模板中的所有模板参数指定一个具体的类
  • 偏特化:部分指定模板参数的类
  • 类模板可以全特化也可以偏特化
  • 函数模板只能全特化(因为重载可以达到偏特化的效果)

类:

 1 template<typename T1, typename T2>  
 2 class Test  
 3 {  
 4 public:  
 5     Test(T1 i,T2 j):a(i),b(j){cout<<"模板类"<<endl;}  
 6 private:  
 7     T1 a;  
 8     T2 b;  
 9 };  
10   
11 template<>  
12 class Test<int , char>  
13 {  
14 public:  
15     Test(int i, char j):a(i),b(j){cout<<"全特化"<<endl;}  
16 private:  
17     int a;  
18     char b;  
19 };  
20   
21 template <typename T2>  
22 class Test<char, T2>  
23 {  
24 public:  
25     Test(char i, T2 j):a(i),b(j){cout<<"偏特化"<<endl;}  
26 private:  
27     char a;  
28     T2 b;  
29 };  

函数:

 1 //模板函数  
 2 template<typename T1, typename T2>  
 3 void fun(T1 a , T2 b)  
 4 {  
 5     cout<<"模板函数"<<endl;  
 6 }  
 7   
 8 //全特化  
 9 template<>  
10 void fun<int ,char >(int a, char b)  
11 {  
12     cout<<"全特化"<<endl;  
13 }  
14   
15 //函数不存在偏特化:下面的代码是错误的  
16 /* 
17 template<typename T2> 
18 void fun<char,T2>(char a, T2 b) 
19 { 
20     cout<<"偏特化"<<endl; 
21 } 
22 */  

 

posted on 2016-09-11 21:08  小菜鸡y  阅读(240)  评论(0编辑  收藏  举报