让我们来看看下面的函数:
auto F(vector <int> *p) {
return [p](int y) -> int{ return y + (*p)[0]; };
}它做了一件非常简单的事情:它在整数向量处接收一个指针,并返回一个lambda,它有另一个整数作为输入,并返回将这个整数添加到我们有指针的向量的第一个元素的结果。如果我想实现一个可以接受这样一个lambda作为输入的高阶函数,我显然不能在原型中使用auto。我试过这样修理它:
typedef int *A (int);
A F(vector <int> *p) {
return [p](int y) -> int{ return y + (*p)[0]; };
}但是这种实现也带来了冲突: lambda类型不能转换为A。
这是如何实施的?
发布于 2019-11-18 18:13:11
,我试过这样修复它:
typedef int *A (int);
A F(vector <int> *p) {
return [p](int y) -> int{ return y + (*p)[0]; };
}...无法将lambda类型转换为
A。
原则上,这对于完全无状态的lambda来说是有意义的。lambda有一个捕获,这意味着它有需要存储在某个地方的状态,这意味着它必须是一个可调用的对象,而不是一个简单的空闲函数。
你的选择是:
模板int higherOrder(int x,Func& f) {返回f(x);}
或者
int higherOrder(int x,std::function const &f) {返回f(x);}
https://stackoverflow.com/questions/58920483
复制相似问题