我的代码的简化版本在这里
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);});
关于C++ 重载函数作为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25871381/