温馨提示×

c++ then与lambda表达式的结合使用

c++
小樊
83
2024-09-16 15:51:39
栏目: 编程语言

在 C++ 中,then 和 lambda 表达式可以结合使用,以便在异步操作完成时执行特定的代码。这种结合通常用于异步编程和任务链。下面是一个简单的示例,展示了如何将 then 与 lambda 表达式结合使用:

#include <iostream>
#include <future>
#include <chrono>

int main() {
    // 创建一个异步任务
    auto async_task = std::async(std::launch::async, []() {
        std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟耗时操作
        return 42; // 返回结果
    });

    // 使用 then 方法链接一个 lambda 表达式,该表达式将在异步任务完成后执行
    auto result_future = async_task.then([](std::future<int> fut) {
        int result = fut.get(); // 获取异步任务的结果
        std::cout << "Async task completed with result: " << result << std::endl;
        return result * 2; // 返回新的结果
    });

    // 获取最终结果
    int final_result = result_future.get();
    std::cout << "Final result: " << final_result << std::endl;

    return 0;
}

在这个示例中,我们首先创建了一个异步任务(async_task),该任务在一个单独的线程上运行并在 2 秒后返回结果 42。然后,我们使用 then 方法将一个 lambda 表达式链接到异步任务上。当异步任务完成时,lambda 表达式将被执行,并打印出异步任务的结果。最后,我们从 result_future 中获取最终结果,并将其打印出来。

需要注意的是,std::future 类没有内置的 then 方法。在这个示例中,我们使用了一个名为 then 的自定义扩展方法。要实现这个功能,你可以使用第三方库,如 cpp-taskflow,或者自己实现一个类似的功能。

0