GPT5给了个更现代的写法,替换了不再使用的一些废弃方式。我也不知道写的咋样,没细看
class ThreadPool {
public:
template <class F, class... Args>
auto Enqueue(F&& f, Args&&... args)
-> std::future<std::invoke_result_t<F, Args...>>
{
using return_type = std::invoke_result_t<F, Args...>;
// 用 lambda 代替 bind
auto task = std::make_shared<std::packaged_task<return_type()>>(
[func = std::forward<F>(f), ... args = std::forward<Args>(args)]() mutable {
return std::invoke(std::move(func), std::move(args)...);
}
);
std::future<return_type> res = task->get_future();
{
std::unique_lock<std::mutex> lock(queue_mutex);
tasks.emplace([task]() { (*task)(); });
}
condition.notify_one();
return res;
}
private:
std::mutex queue_mutex;
std::condition_variable condition;
std::queue<std::function<void()>> tasks;
};
--
FROM 114.222.60.*