函数模板 ---实参的演绎(deduction)

  1. template<typename   T> //模板参数
  2. inline T const &max(T const& a,T const& b) //调用参数
  3. {
  4.     return a<b?b:a;
  5. }

 

因为调用参数的类型构造自模板参数,所以模板参数和调用参数通常是相关的。我们把这个概念称为:函数模板的实参演绎。它让你可以像普通函数那样调用函数模板。

 

但是当模板参数和调用参数没有发生关联时,或者不能由调用参数来决定模板参数的时候,你在调用时就必须显式指定模板实参。如下,你可以引入第三个模板实参来定义函数的返回类型

  1. template <typename T1,typename T2,typename RT>
  2. inline RT max(T1 const&a ,T2 const&b);

 

然而,模板实参演绎并不适合返回类型,因为RT不会出现在函数调用参数的类型里面。因此,函数调用并不能演绎出RT。于是,你必须显式地指定模板实参列表。例如:

  1. max<int,double,double>(4,4.2)//比较麻烦

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值