2013-06-04 95 views
5

將具有6個參數或更多參數的函數傳遞給QtConcurrent::run()時出現編譯錯誤。當我將它們減少到5個參數時,我不會再遇到這個錯誤。QtConcurrent :: run()不能處理超過5個參數?

這個虛擬的代碼重現錯誤對我來說:

void foo(int, int, int, int, int, int) 
{ 

} 

QtConcurrent::run(foo, 1, 2, 3, 4, 5, 6); 

編譯器錯誤是:

error: no matching function for call to 'run(void (&)(int, int, int, int, int, int), int, int, int, int, int, int)' 

難道這應該是這樣的嗎?最多是否限制了5個參數QtConcurrent::run()

+2

如果它有限,它不會讓我感到驚訝。畢竟,它必須與預C++ 11編譯器一起工作。 – Angew

回答

8

qtconcurrentrun.h

template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5> 
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5); 

有5個參數是函數可以

6

在一邊,你可以使用std::bindboost::bind傳遞更多然後5個參數(如果無限的C++ 11):

QFuture<void> result = QtConcurrent::run(std::bind(&foo, 1, 2, 3, 4, 5, 6)); 

另一方面,5個參數守對於每個功能來說足夠的是。您可能需要重新考慮您的設計以減少功能參數的數量。你可以傳遞一些對象來代替。

Data d; 
QFuture<void> result = QtConcurrent::run(foo, d); 

也不要忘記在預5.3,沒有理由併發::運行可以hung有時構建。

相關問題