lambda C++的类型转换

Ole*_*leg 4 c++ lambda function type-conversion

是否可以将lambda函数作为某种类型的函数传递?

例如,我有

typedef double(*Function)(int, double);
Run Code Online (Sandbox Code Playgroud)

如何将lambda函数转换为该类型?

Ker*_* SB 7

对于无状态lambda,可以隐式使用此转换:

Function f = [](int, double) -> double {};
Run Code Online (Sandbox Code Playgroud)

如果您只想转换lambda表达式本身,可以使用一元运算+符来实现:

auto* p = +[](int, double) -> double {};   // p is of type double(*)(int, double)
Run Code Online (Sandbox Code Playgroud)

带捕获的lambda不提供这样的转换,因为它在语义上不等同于(无状态)函数(这甚至适用于默认捕获但不会捕获任何内容的情况).