模板参数 自变量推导

一、基本概念

Function templates 有两种参数: 
1. Template parameters(模板参数),在function template 名称前的一对角(尖)括号中声明: 
template <typename T>              // T  是个  template parameter 


2. Call parameters(调用参数),在  function template 名称后的小(圆)括号中声明: 
... max (T const& a, T const& b); // a  和  b  是调用参数 


二、自变量推导例子

1、一般推导方式

template <typename T1, typename T2> 
inline T1 max (T1 const& a, T2 const& b) {  
   return a < b ? b : a; 

... 
max(4, 4.2); // OK。返回类型和第一自变量类型相同


2、带有函数返回值的推导方式(1)

当template parameters和call parameters之间没有明显联系,而且编译器无法推导出template arameters  时,你必须明确地在调用时指定template arguments。例如你可以为max()引入第三个 template argument type 作为返回类型:

 

template <typename T1, typename T2, typename RT> 
inline RT max (T1 const& a, T2 const& b); 
... 
max<int,double,double>(4, 4.2); 
//  OK,但是相当冗长(译注:因为其实只需明写第三自变量类型,却连前两个自变量类型都得写出来)


3、带有函数返回值得推导方式(2)

另有一种作法是只明确写出第一自变量,剩下的留给编译器去推导,你要做的只
是把所有无法被自动推导出来的自变量类型写出来。


template <typename RT, typename T1, typename T2> 
inline RT max (T1 const& a, T2 const& b); 
... 
max<double>(4,4.2); // OK,返回类型为  double 


此例之中,我们调用  max()时,只明确指出返回类型RT  为double,至于T1  和T2  两个参数类型会被编译器根据调用时的自变量推导为int  和  double。 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值