Могу ли я использовать 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
,