C ++:实现一个接受lambda作为输入的高阶函数

问题描述 投票:0回答:1

让我们看一下以下功能:

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

如何实施?

c++ lambda types return-type higher-order-functions
1个回答
0
投票

您可以使用模板:

template <class Func>
void foo(Func func);

foo(F(p));  // ok; Func deduced to the lambda type
© www.soinside.com 2019 - 2024. All rights reserved.