假设我有一个C函数
typedef void (* callback_t)(void* data);
status_you_dont_care_about register_callback(callback_t callback, void* data);
我想传递一个lambda作为回调。
什么是惯用的方式...
答案 0 :(得分:0)
正如评论者所指出的,lambda隐式转换为适当类型的函数指针,因此我们可以这样写:
auto my_lambda = [](void* data) { /* do stuff here */};
register_callback(my_lambda, get_pointer_to_data());
,它将编译。别忘了检查返回值:-)
这是我目前正在做的事情,但我怀疑这不是最佳选择。
首先,我确保lambda捕获了它需要的所有内容,以便它本身可以通过 no 参数调用(这样,它实际上就不会 not 占用{{1 }}就像回调一样)。然后我使用以下代码:
void*
注意:使用这种方法,回调只能被调用一次。它可以适应需要多次调用的回调的情况,在取消注册/销毁所有需要调用的回调时都可以取消分配。