我正在尝试使用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)