上面用了 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 更不会出错。