传递lambda与捕获作为另一个lambda的参数,可能吗?

jav*_*ver 2 c++ lambda

是否可以将带有capture的 lambda函数作为另一个lambda函数的参数传递?

int a=3;
auto func_1=[&]()->{a=4;};
auto func_2=[&](  ?????  fParam   ){  fParam(); }; //what is a proper ?????
func_2(func_1);
Run Code Online (Sandbox Code Playgroud)

(我想用它来做一些奇特的事情.)

编辑

感谢许多解决方案.我学到了很多东西.

在原始问题中,我忘了提到func_2也想要接收其他功能,例如func_2(func_1a),func_2(func_1b)等.

因此,decltype是原始问题的正确答案之一,但不能满足我的要求.

Sam*_*hik 7

auto是为了:

auto func_2=[&](auto fParam   ){  fParam(); }; 
Run Code Online (Sandbox Code Playgroud)

您的编译器必须至少具有C++ 14级语言支持.

编辑:使用C++ 11,以下似乎工作:

auto func_2=[&](decltype(func_1)  fParam   ){  fParam(); }; 
Run Code Online (Sandbox Code Playgroud)

  • 对于C++ 11,`std :: function`有效.当然,如果仅使用`func_1`调用它,捕获效果会更好. (2认同)