文档目录

上面用了 std::bind,其实用 Lambda 也可以:

// bind 写法
auto task = std::make_shared<std::packaged_task<ReturnType()>>(
    std::bind(std::forward<F>(f), std::forward<Args>(args)...)
);

// lambda 写法(C++17 起更推荐)
auto task = std::make_shared<std::packaged_task<ReturnType()>>(
    [f = std::forward<F>(f), ...args = std::forward<Args>(args)]() mutable {
        return std::invoke(std::move(f), std::move(args)...);
    }
);

Lambda 写法更直观,但注意 C++17 才支持 lambda 捕获参数包展开。面试用 std::bind 更不会出错。