我可以轻松地声明匿名函数(它们与lambda相同,但没有"context" - [...]
)auto
:
#includeusing namespace ::std; void foo(void (*f)(char)) { f('r'); } int main() { void (*anon)(char) = [](char c) -> void { cout << c << endl; }; foo(anon); return 0; }
但是如何宣布lambda?这是唯一可能的方式吗?(也许使用typedef).我在这里使用::std::function
,但我没有在foo参数中提到f的上下文...:
#include#include using namespace ::std; //int foo(auto f, char x) // !only since c++14 int foo(function f, char x) { return f(x+1); } int main() { int a = 5, b = 10; //void (*lambda)(char) = [](char c) { cout << c << endl; }; //auto sample_lambda = [&a,b](char c) -> int // !only since c++11 function sample_lambda = [&a,b](char c) -> int { for (;a
TartanLlama.. 5
你不能.
闭包的类型是一种唯一的,未命名的类型.你的第一个例子是有效的,因为闭包类型有一个转换函数指向函数的指针,如果它们没有捕获任何东西,不是因为闭包是一个
void (*) (char)
.您最好坚持使用,
auto
因为std::function
类型擦除会产生额外的开销.
1> TartanLlama..:你不能.
闭包的类型是一种唯一的,未命名的类型.你的第一个例子是有效的,因为闭包类型有一个转换函数指向函数的指针,如果它们没有捕获任何东西,不是因为闭包是一个
void (*) (char)
.您最好坚持使用,
auto
因为std::function
类型擦除会产生额外的开销.