Могу ли я использовать C ++ 11 лямбда с libevent? - PullRequest
0 голосов
/ 22 ноября 2018

Существует тип функции обратного вызова в 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 Ответ

0 голосов
/ 22 ноября 2018

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

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

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

...