C++ 11使用Capture进行Lambda传递

Ran*_*own 5 c++ lambda c++11

我正在尝试使用capture [&]传递lambda函数.存储捕获lambda的变量的正确声明是什么?[f2以下]

// Non-capturing
void (*f1)() = [](){   }; // Works

// All by reference
void (*f2)() = [&](){  }; // Syntax Error
Run Code Online (Sandbox Code Playgroud)

qua*_*dev 10

C++标准,第5.1.2/6节:[expr.prim.lambda]

对于一个非通用λ-表达的闭合类型没有λ-捕获具有公共非虚拟非显式const的转换功能,以函数指针与C++语言联动装置(7.5),其具有相同的参数和返回类型为闭包类型的函数调用操作符.此转换函数返回的值应为函数的地址,该函数在调用时与调用闭包类型的函数调用运算符具有相同的效果

由于lambda具有捕获(默认[&]值为1 ),因此指向函数的指针没有转换运算符.


或者,您可以std::function<>用来包装lambda:

#include <functional>
#include <iostream>

int main()
{
  int i = 42;  
  std::function<void(void)> f = [&](){ std::cout << i; };
  f();
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.这对我来说太过于罗嗦了. (2认同)