让我们看一下以下功能:
auto F(vector <int> *p) {
return [p](int y) -> int{ return y + (*p)[0]; };
}
它做的很简单:它在整数向量处接收一个指针,并返回一个lambda,该lambda以另一个整数作为输入,并返回将这个整数加到我们有指针的向量的第一个元素上的结果。如果我想实现一个可以接受lambda作为输入的高阶函数,显然,我不能在原型中使用auto
。我试图像这样修复它:
typedef int *A (int);
A F(vector <int> *p) {
return [p](int y) -> int{ return y + (*p)[0]; };
}
但是该实现也会带来冲突:lambda类型无法转换为A
。
如何实施?
您可以使用模板:
template <class Func>
void foo(Func func);
foo(F(p)); // ok; Func deduced to the lambda type