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表达式的示例,它们允许您在不暴露私有成员的情况下访问类的成员,并能够将成员函数传递给需要回调的函数或库。