我可以在libevent中使用C ++ 11 lambda吗?

时间:2018-11-22 09:37:54

标签: c++11 lambda libevent boost-lambda

event_new()使用的libevent中有一个回调函数类型。

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

我想将lambda与event_callback_fn一起使用。

如果我使用

[](evutil_socket_t fd, short flags, void * _param){}

一切都很好。
但是,如果我使用lambda捕获列表

[&](evutil_socket_t fd, short flags, void * _param){} 

event_new()将不会被编译。

1 个答案:

答案 0 :(得分:4)

类型别名

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

是一个函数指针。当Lambda不捕获任何内容时,它们可以自动转换为函数指针。定义闭包(有状态lambda)后,就不能将其作为类型为event_callback_fn的参数传递。