【发布时间】:2020-05-03 16:05:21
【问题描述】:
我有这个关于std::function的例子:
int add(int x, int y, int z) {return x + y + z;}
int add(int a, int b) {return a + b;}
int main()
{
std::function<int(int, int)> fn = add; // error
int(*pfn)(int, int) = add; // OK
fn = pfn; // ok fn is bound to add(int, int)
std::cout << fn(5, 7) << std::endl; // 12
}
为什么在初始化
fn时重载解析无法解析add的哪个版本,但能够初始化函数指针pfn?是否有一种解决方法,而不是使用函数指针来决定哪个版本的重载函数作为
std::function对象的初始化程序?
【问题讨论】:
-
std::function有一个模板化的构造函数,它几乎可以接受任何东西。编译器没有信号来选择正确的重载。一种可能的解决方法是显式转换:std::function<int(int, int)> fn = static_cast<int(*)(int, int)>(add); -
@IgorTandetnik:是的,我认为在这里使用
static_cast是个好主意,谢谢。
标签: c++ function function-pointers overload-resolution