2015-10-14 45 views
1

爲什麼在添加捕獲元素時以下lambda不符合簽名?C++ 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); 

回答

3

只有captureless lambdas可以轉換爲一個指針的函數。

5

帶捕捉的Lambdas不能簡單地轉換爲函數指針。爲了獲得最大的靈活性(但不是性能)考慮使用std::function<void(unsigned,void*,void*,unsigned)>