将变量传递给lambda

时间:2019-05-07 17:25:09

标签: c++ pointers lambda

我有一个函数,其参数为CallbackType

typedef (*void) (const *char, bool)

我需要传递其他上下文,因此我认为使用lambdas是一个好主意:

CallbackType DelegateHandler(Pointer ptr) {
    return [&](const char* a, bool b) {
        callback(ptr, a, b); 
    };
}

它仅在捕获Lambda的情况下才有效,并且捕获Lambda无法转换为常规函数指针,因此出现错误:

no known conversion for argument 1 from SetHandler(Pointer)::<lambda(const char*, bool)>’ to ‘CallbackType’ {aka ‘void(*)(const char*, bool)’ 

有什么想法可以通过简单的方式解决吗?

2 个答案:

答案 0 :(得分:3)

正如Michael所指出的,闭包不能转换为函数指针。

如果有这样的选项,最好接受模板参数或std::function而不是原始函数指针。

答案 1 :(得分:0)

包含捕获的Lambda函数不能转换为普通函数指针。 有关更多信息,请查看thisthis SO问题。

通常,您有一个回调,它允许您包含传递的自定义指针,其中将包含您希望从回调中获得的额外数据。