![](/img/trans.png)
[英]C++ Multithreading Error : no matching function for call to 'std::thread::thread(<unresolved overloaded function type>
[英]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()”起作用。
感謝閱讀。
如果您的ReturnType
是void
,您的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.