wangdamingll的博客

个人的一些学习总结

模板参数 自变量推导

一、基本概念

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。 


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangdamingll/article/details/53992974
个人分类: 模板
上一篇容器搜索算法的选择
下一篇重载 函数模板
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭