c++ templates 函数模板



1、定义函数模板:

[cpp]  view plain  copy
  1. template<typename T>  
  2. inline T const& Max(T const& a, T const& b){  
  3.   return a < b ? b : a;  
  4. }  

解释:template表明了这是一个函数模板,<>指定了模板参数区域,typename表明了后面的参数是一个类型名, T是模板参数,它可以用来指定所有的类型,a和b是调用参数,位于模板函数名称后面,在一对()内进行声明。这里typename可以用class来取代,但最好使用typename。

2、调用函数模板

[cpp]  view plain  copy
  1. #include<iostream>  
  2. #include<string>  
  3. using namespace std;  
  4.   
  5. template<typename T>  
  6. inline T const& Max(T const& a, T const& b){  
  7.     return a < b ? b : a;  
  8. }  
  9. int main(){  
  10.     cout << Max(5, 8) << endl;   
  11.       
  12.     cout << Max(3.4, -6.5) << endl;  
  13.   
  14.     string str1 = "math";  
  15.     string str2 = "mathmatics";  
  16.     cout << Max(str1, str2) << endl;  
  17.   
  18.     system("pause");  
  19.     return 0;  
  20. }  

调用函数模板时,模板被编译两次:

第一次:实例化之前,检查模版代码本身,查看语法是否正确。

第二次:在实例化期间,检查模版代码,查看是否所有的调用都有效。

3、重载函数模板

函数模版也可以进行重载,一个非模版函数可以和一个同名的函数模版同时存在,调用的优先级是非模板函数的优先级高。<>符号显式指定一个空的模板实参列表,告诉编译器只有模板才能匹配这个调用,而且所有的模板参数都应该根据调用实参演绎出来。函数的所有重载版本的声明都应该位于该函数被调用的位置之前。

例子说明:

[cpp]  view plain  copy
  1. #include<iostream>  
  2. #include<string>  
  3. using namespace std;  
  4.   
  5. inline int const& Max(int const& a, int const& b){  
  6.     cout << "调用(1):";  
  7.     return a < b ? b : a;  
  8. }//(1)  
  9.   
  10. template<typename T>  
  11. inline T const& Max(T const& a, T const& b){  
  12.     cout << "调用(2):";  
  13.     return a < b ? b : a;  
  14. }//(2)  
  15. template<typename T>  
  16. inline T const& Max(T const& a, T const& b,T const& c){  
  17.     cout << "调用(3):";  
  18.     return Max(Max(a, b), c);  
  19. }//(3)  
  20.   
  21. int main(){  
  22.     cout << Max(7, 45, 44) << endl;//调用(3)  
  23.     cout << Max(7.2, 5.7) << endl;//调用(2),Max<double>  
  24.     cout << Max<>(4, 5) << endl;//调用(2),<>符号显式指定一个空的模板实参列表,告诉编译器只有模板才能匹配这个调用  
  25.     cout << Max(4, 5) << endl;//调用(1)  
  26.   
  27.     system("pause");  
  28.     return 0;  
  29. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值