C++11 我可以使用C++;11 lambda和libevent?

C++11 我可以使用C++;11 lambda和libevent?,c++11,lambda,libevent,boost-lambda,C++11,Lambda,Libevent,Boost Lambda,event_new()使用的libevent中存在回调函数类型 我想将lambda与事件\u回调\u fn一起使用 如果我使用 [](evutil_socket_t fd, short flags, void * _param){} 一切正常。 但是如果我使用lambda捕获列表 [&](evutil_socket_t fd, short flags, void * _param){} 不会编译event_new()。类型别名 void (*event_callback_fn)(e

event_new()使用的libevent中存在回调函数类型

我想将lambda与事件\u回调\u fn一起使用

如果我使用

[](evutil_socket_t fd, short flags, void * _param){}
一切正常。
但是如果我使用lambda捕获列表

[&](evutil_socket_t fd, short flags, void * _param){} 
不会编译event_new()。

类型别名

void (*event_callback_fn)(evutil_socket_t, short, void *);
是一个函数指针。当lambda不能捕获任何内容时,它可以自动转换为函数指针。一旦定义了闭包(有状态lambda),就不能将其作为类型为
event\u callback\u fn的参数传递给类型别名

void (*event_callback_fn)(evutil_socket_t, short, void *);

是一个函数指针。当lambda不能捕获任何内容时,它可以自动转换为函数指针。一旦定义了闭包(有状态lambda),就不能将其作为类型为
event\u callback\u fn

的参数传递,只有无捕获lambda可以转换为指向函数的指针。如果你需要捕获,那么你需要用另一种方法来解决它。简单的答案是否定的。你应该理解s和s是什么。但是,您可以将闭包作为
void*
client data@Basile Starynkevitch传递,因此事件是新的(\u base,-1,EV\u TIMEOUT,[](evutil\u socket\t fd,short flags,void*\u param){},[](){});这样地?仍然编译错误只有无捕获的lambda可以转换为指向函数的指针。如果你需要捕获,那么你需要用另一种方法来解决它。简单的答案是否定的。你应该理解s和s是什么。但是,您可以将闭包作为
void*
client data@Basile Starynkevitch传递,因此事件是新的(\u base,-1,EV\u TIMEOUT,[](evutil\u socket\t fd,short flags,void*\u param){},[](){});这样地?仍然存在编译错误