1. 当用一个函数模板初始化一个函数指针或为一个函数指针赋值时, 编译器使用指针的类型来推断模板实参
template ctypename T> int compare (const T &, const T& );// pfl 指向实例 int compare (const int &, const int & )int (*pf1) (const int&, const int& ) = compare;
1.1 如果不能从函数指针类型确定模板实参, 则产生错误:
/ / func 的重栽版本; 每个版本接受一个不同的函数指针类型void func (int ( * ) (const strings, const strings ) );void func (int (*) (const int &, const int & ) );func (compare); / / 错误: 使用 compare 的哪个实例?
1.2 解决方法: 通过使用显式模板实参来消除 func 调用的歧义
如下表达式调用的 func 版本接受一个函数指针, 该指针指向的函数接受两个 const int &参数
// 正确: 显式指出实例化哪个 compare 版本func (compare<int>); // 传递 compare (const int&, const int&)