关闭

模板参数 自变量推导

69人阅读 评论(0) 收藏 举报
分类:

一、基本概念

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:22874次
    • 积分:1381
    • 等级:
    • 排名:千里之外
    • 原创:122篇
    • 转载:6篇
    • 译文:0篇
    • 评论:0条