定义函数模板add,以下说法正确的有:()
template<typename T> T add(T &x,T &y) { return x+y; } const int (*pfun1)(const int &a ,const int &b); const int (*pfun2)(int &a ,int &b); int(*pfun3)(const int &a ,const int &b); int(*pfun4)(int &a, int &b);
template<typename T> T add(T &x,T &y) { return x+y; } const int (*pfun1)(const int &a ,const int &b); const int (*pfun2)(int &a ,int &b); int(*pfun3)(const int &a ,const int &b); int(*pfun4)(int &a, int &b);
pfun2 = add失败,需要显示定义为pfun2 = add<int>
pfun1 = add
pfun3 = add失败,add无法正确推导
pfun4 = add<int>失败,函数指针不可赋值
//在VS2017上跑的结果,pfun1 = add不行。。。想听大佬解释
template<typename T>
T add(T &x, T &y)
{
return x + y;
}
int main()
{
const int(*pfun1)(const int &a, const int &b);
const int(*pfun2)(int &a, int &b);
int(*pfun3)(const int &a, const int &b);
int(*pfun4)(int &a, int &b);
pfun1 = add; //(1)错误C2568:“ = ”: 无法解析函数重载;(2)错误C2563:在形参表中不匹配
//pfun2 = add; //错误,没有与所需类型匹配的函数模板“add”实例
//pfun3 = add; //错误,没有与所需类型匹配的函数模板“add”实例
pfun4 = add; //正确
system("pause");
return 0;
}