簡體   English   中英

c++ 線程池 std::promise 和 function 類型錯誤

[英]c++ Thread pool std::promise and function type error

我嘗試編寫自己的線程池版本,但在行方面遇到困難

            template <typename F, typename...Args>
    auto addWork(F&& f, Args&&... args) -> std::future<decltype (f(args...))>
    {
        using ReturnType = decltype(f(args...));
            //...
            result.set_value(f(args...));
            std::promise<ReturnType> result;
            result.set_value(f(args...));
            return result.get_future();
            //...

一切似乎都有效,除非 f 沒有參數或為 void 類型。 我不知道如何使“set_value()”起作用。

感謝閱讀。

如果您的ReturnTypevoid ,您的std::promise<ReturnType> result變量是一個特化 - std::promise<void> 它的set_value (4)方法不接受任何 arguments。

要解決此問題,您可以只使用if constexpr檢查您是否正在處理涉及 function 返回void的特殊情況。 簡單地改變這個:

std::promise<ReturnType> result;
result.set_value(f(args...));
return result.get_future();

對此:

std::promise<ReturnType> result;
if constexpr (std::is_same_v<ReturnType, void>) {
    f(args...);
    result.set_value();
} else {
    result.set_value(f(args...));
}
return result.get_future();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM