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

来源:互联网 发布:php二次开发培训 编辑:程序博客网 时间:2024/06/05 18:15
  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)//比较麻烦

 

 

 

 

 

原创粉丝点击