从函数调用获得的实参确定模板实参的类型和值的过程叫做模板实参推断 《C++ Primer 4th》
举例
template<class Glorp>//模板类型形参 int compare(const Glorp& v1,const Glorp& v2)//函数形参 { if(v1<v2) { return -1; } if(v2<v1) { return 1; } return 0; } int _tmain(int argc, _TCHAR* argv[]) { compare(1,0);//未显式指定模板参数类型,所以参数推导机制起作用 compare(3.14,2.7); return 0; }
以下调用代码会导致如下错误:
short i=0; int j=3; compare(i,j); Error 1 error C2782: 'int compare(const Glorp &,const Glorp &)' : template parameter 'Glorp' is ambiguous
以下调用代码正确:
template<class A> void Fobj(A a) { cout<<a<<endl; } nt _tmain(int argc, _TCHAR* argv[]) { const int x=9; Fobj(x); return 0; }
例如:
template <typename T> int compare (const T& ,const T&); int (*pf1) (const int&,const int&) = compare<int>;
这里compare<int>模板被赋值给pf1函数指针。以后调用pf1执行函数的时候,编译器使用pf1的类型来推导模板实参。