回调写成lambda 表达式变成成员变量
时间: 2023-07-06 11:08:58 浏览: 74
将lambda表达式转换成成员变量的主要步骤如下:
1. 将lambda表达式定义为一个函数对象,可以使用auto或者std::function来保存这个函数对象。
2. 将lambda表达式所在的函数的参数作为成员变量传递给lambda表达式定义时的捕获列表,以便在lambda表达式中访问这些成员变量。
下面是一个示例代码,用于将一个lambda表达式转换成成员变量:
```c++
class MyClass {
public:
MyClass(int data) : m_data(data) {}
void setCallback(std::function<void()> callback) {
m_callback = callback;
}
void callCallback() {
if (m_callback) {
m_callback();
}
}
private:
int m_data;
std::function<void()> m_callback;
};
int main() {
MyClass obj(42);
int x = 10;
obj.setCallback([&x]() {
std::cout << "x = " << x << std::endl;
});
obj.callCallback();
return 0;
}
```
在上面的示例代码中,我们定义了一个MyClass类,其中包含一个整数成员变量m_data和一个std::function类型的成员变量m_callback。setCallback函数用于设置回调函数,callCallback函数用于调用回调函数。
在setCallback函数中,我们使用lambda表达式定义了一个回调函数,它捕获了一个整数变量x,并在回调函数中输出了x的值。将lambda表达式转换成成员变量的关键在于,我们在lambda表达式的捕获列表中传递了整数变量x的引用,这样我们就可以在lambda表达式中访问这个成员变量了。然后将lambda表达式保存到成员变量m_callback中。
在callCallback函数中,我们首先判断m_callback是否为空,如果不为空就调用它。在本例中,回调函数输出了x的值,因为x是在lambda表达式定义时捕获的。
阅读全文