С++ Lambda, вызывающий «функция кандидата нежизнеспособна:»

Почему следующая лямбда не придерживается подписи при добавлении элемента захвата?

[&callback](unsigned handle, void* userData, void* data, unsigned size) -> void { ... }

но это будет?

[](unsigned handle, void* userData, void* data, unsigned size) -> void { ... }

Подпись:

typedef void (*em_async_wget2_data_onload_func)(unsigned, void*, void*, unsigned);

person Jan de Jager    schedule 14.10.2015    source источник


Ответы (2)


Лямбды с захватами нельзя просто преобразовать в указатели на функции. Для максимальной гибкости (но не производительности) рассмотрите возможность использования std::function<void(unsigned,void*,void*,unsigned)>

person jepio    schedule 14.10.2015

Только незахваченные лямбды могут быть преобразованы в указатель на функцию.

person Some programmer dude    schedule 14.10.2015