如何在C++中注册一个lambda表达式作为回调函数?
时间: 2024-09-23 09:07:01 浏览: 63
在C++中,注册lambda表达式作为回调函数可以通过一些技巧来实现。由于直接将lambda表达式作为回调函数传递可能会遇到困难,因为lambda表达式无法直接转换为无状态的`std::function`,所以我们需要采取一些方法来处理这个问题。
一种常见的做法是使用全局的`invoke_function`,这个函数接受一个`void*`类型的参数,然后调用之前注册的lambda表达式。另一种方法是使用模板结构体来保存状态,这样我们就可以在回调函数中使用有捕获变量的lambda表达式了。
下面是一个示例代码,演示了如何将lambda表达式绑定到回调函数:
```cpp
#include <iostream>
// 定义回调函数类型
typedef void (*CallbackType)(void*);
// 全局变量,用于存储lambda表达式
std::function<void(void*)> g_callback;
// 注册回调函数
void register_callback(CallbackType callback, void* context) {
g_callback = callback;
}
// 调用回调函数
void invoke_function(void* context) {
if (g_callback) {
g_callback(context);
}
}
int main() {
// 注册一个lambda表达式作为回调函数
register_callback([](void* context){ std::cout << "Hello from lambda! " << std::endl; }, nullptr);
// 调用回调函数
invoke_function(nullptr);
return 0;
}
```
阅读全文
相关推荐


















