请看下面的例子
void foo(const std::function<int()>& f) {
std::cout << f() << std::endl;
}
void foo(const std::function<int(int x)>& f) {
std::cout << f(5) << std::endl;
}
int main() {
foo([](){return 3;});
foo([](int x){return x;});
}
这段代码不能编译,因为调用foo
被认为是模糊的。据我所知,这是因为 lambda 函数不是预先定义好的std::function
类型,需要将其强制转换为该类型,并且有一个std::function
构造函数可以接受任意参数。
也许有人可以解释一下,为什么会创建一个带有任意参数的隐式构造函数。然而,我的实际问题是是否有一种解决方法,允许使用lambda函数的函数签名重载函数foo
。我已经尝试了函数指针,但由于捕获的lambda函数无法转换为普通函数指针,它并没有起作用。
非常感谢任何帮助。