2013-06-04 13 views
5

Występuje błąd kompilacji podczas przekazywania funkcji o 6 parametrach lub więcej do QtConcurrent::run(). Kiedy zmniejszę je do 5 parametrów, nie otrzymuję już tego błędu.QtConcurrent :: run() nie może obsłużyć więcej niż 5 argumentów?

Ten manekin odtwarza kod błędu dla mnie:

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

} 

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

Błąd kompilatora jest:

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

Czy to ma być tak? Czy QtConcurrent::run() jest naprawdę ograniczone do maksymalnie 5 argumentów?

+2

Nie zdziwi mnie to, że jest ograniczona. W końcu musi działać z kompilatorami przed C++ 11. – Angew

Odpowiedz

8

Zobacz 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); 

Istnieje 5 argumenty, że funkcja może podjąć

6

Z jednej strony, można użyć std::bind lub boost::bind przekazać więcej niż 5 argumentów (bez ograniczeń w przypadku C++ 11):

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

z drugiej strony, 5 argumenty Shou ld być wystarczy dla każdej funkcji. Możesz zrewidować projekt, aby zmniejszyć liczbę parametrów funkcji. Zamiast tego możesz przekazać obiekt do działania.

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

również nie zapominać, że jednoczesne :: run może hung czasami bez powodu w ampułko-5,3 buduje.

Powiązane problemy