Могу ли я использовать C++11 лямбда с libevent?

В libevent есть тип функции обратного вызова, используемый event_new().

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

Я хочу использовать лямбду с event_callback_fn.

Если я использую

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

все отлично.
Но если я использую список захвата лямбды

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

event_new () не будет скомпилирован.

1 ответ

Псевдоним типа

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

это указатель на функцию Лямбды могут автоматически преобразовываться в указатели функций, когда они ничего не захватывают. Как только вы определите замыкание (с лямбда-выражением с состоянием), вы не сможете передать его в качестве аргумента типа event_callback_fn,

Другие вопросы по тегам