C++笔记之lambda捕获列表中的’this’指针
code review!
捕获this
指针的lambda表达式在C++中有多种应用场景。以下是一些示例:
- 异步编程:当您需要在异步操作中访问类的成员变量或成员函数时,可以使用捕获
this
指针的lambda表达式。例如,在使用异步任务库时,您可以捕获this
指针以访问对象的成员。
#include <iostream>
#include <future>
class MyClass {
public:
void PerformAsyncTask() {
std::future<void> result = std::async([this]() {
// 在异步任务中访问类的成员
std::cout << "Async task accessing data: " << data << std::endl;
});
}
private:
int data = 42;
};
int main() {
MyClass obj;
obj.PerformAsyncTask();
std::this_thread::sleep_for(std::chrono::seconds(1)); // 等待异步任务完成
return 0;
}
- 回调函数:当您需要将成员函数作为回调传递给外部库或其他函数时,捕获
this
指针的lambda表达式可以非常有用。Lambda函数可以在回调时访问类的成员。
#include <iostream>
#include <functional>
class MyClass {
public:
void RegisterCallback() {
// 将成员函数作为回调传递
std::function<void()> callback = [this]() {
std::cout << "Callback accessing data: " << data << std::endl;
};
// 模拟回调
callback();
}
private:
int data = 42;
};
int main() {
MyClass obj;
obj.RegisterCallback();
return 0;
}
这些是一些使用捕获this
指针的lambda表达式的示例,它们允许您在不暴露私有成员的情况下访问类的成员,并能够将成员函数传递给需要回调的函数或库。