首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于 C++ 中模板的显示实参的匹配顺序有关问题

2013-08-04 
关于 C++ 中模板的显示实参的匹配顺序问题template class T1, class T2, class T3T3 f( T1, T2 )然后是

关于 C++ 中模板的显示实参的匹配顺序问题
template <class T1, class T2, class T3>
T3 f( T1, T2 );

然后是函数调用:
f<double>( 3L, 4 );

谁能告诉我“从左到右”匹配的时候,分别将【函数调用语句】中的类型 double, long, int 匹配给【模板形参列表】T1,T2,T3,还是【函数使用的参数列表】T3,T1,T2呢?换句话说,
(1)T1 = double, T2 = long, T3 = int
(2)T3 = double, T1 = long, T2 = int
中的哪一个正确呢?
如果能给出参考文献就更好了(C++ Primer 3rd ed.)上没讲明白这一点。
[解决办法]
可通过编译例子程序,从编译结果体会书上未找到的细节。

#include <iostream>
using namespace std;

template <class T1, class T2, class T3>
T3 f( T1 a, T2 b)
{
  return (T3)a + (T3)b;
}


int main()
{

  double d1 = f<double>( 3L, 4 );
  //编译报错:error C2783: “T3 f(T1,T2)”: 未能为“T3”推导 模板 参数

  double d2 = f<long, int, double>( 3L, 4 );
  long l = f<double, int, long>( 3, 4 );
  int i = f<double, long, int>( 3, 4 );
  //以上3行显式地按模板定义的顺序给出全部参数,编译通过。
  return 0;
}

[解决办法]
模板函数如果带显式模板参数<>,括号内的始终按模板参数声明顺序来匹配,你的f<double>里只有一个,double肯定是T1,T3无法解析

热点排行