我對C++和編程一般都很陌生。爲了練習,我製作了一個類似於mergesort的排序算法。然後我試着讓它成爲多線程的。當使用std :: async時,C++「無法推導出模板參數」
std::future<T*> first = std::async(std::launch::async, &mergesort, temp1, temp1size);
std::future<T*> second = std::async(std::launch::async, &mergesort, temp2, temp2size);
temp1 = first.get();
temp2 = second.get();
但似乎我的編譯器無法決定使用哪個模板,因爲我得到相同的錯誤兩次。
Error 1 error C2783: 'std::future<result_of<enable_if<std::_Is_launch_type<_Fty>::value,_Fty>::type(_ArgTypes...)>::type> std::async(_Policy_type,_Fty &&,_ArgTypes &&...)' : could not deduce template argument for '_Fty'
Error 2 error C2784: 'std::future<result_of<enable_if<!std::_Is_launch_type<decay<_Ty>::type>::value,_Fty>::type(_ArgTypes...)>::type> std::async(_Fty &&,_ArgTypes &&...)' : could not deduce template argument for '_Fty &&' from 'std::launch'
的錯誤導致我相信的std ::異步超載有兩個不同的模板,一個指定策略和一個未指定,編譯器無法選擇正確的(我使用Visual Studio Express 2013)。那麼如何向編譯器指定適當的模板呢? (做std::future<T*> second = std::async<std::launch::async>(&mergesort, temp2, temp2size);
似乎不工作,我得到無效的模板參數,預期類型)。還有更好的方法來完成這一切嗎? 謝謝!
'mergesort'重載?如果是這樣的話,'&mergesort'在這種情況下是不明確的。 – Simple
不,mergesort的唯一定義是'template T * mergesort(T * arg,int size)' –
Antrikos
好吧,它仍然與模板不一致,因爲模板基本上會標記大量重載。 – Simple