int foo(int x) { return x; } int foo(int x,int y) { return x+y; } template<typename unary_func> int bar(int k,unary_func f) { return f(k); } int main() { bar(3,foo); return 0; }
有没有办法告诉编译器我想通过什么,因为参数是第一个“foo”?
bar<int(int)>(3,foo);
或者将不明确的函数名称转换为可以推导出模板参数的类型:
bar(3,static_cast<int(*)(int)>(foo));
或将其包装在另一个函数(或函数对象)中以消除歧义
bar(3,[](int x){return foo(x);});