c++ qt compiler-errors qtconcurrent

c++ - QtConcurrent:: run() no puede manejar más de 5 argumentos?



compiler-errors (2)

QtConcurrent::run() un error de compilación al pasar una función con 6 parámetros o más a QtConcurrent::run() . Cuando los reduzco a 5 parámetros, ya no recibo este error.

Este código ficticio reproduce el error para mí:

void foo(int, int, int, int, int, int) { } QtConcurrent::run(foo, 1, 2, 3, 4, 5, 6);

El error del compilador es:

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

¿Se supone que es así? ¿Está QtConcurrent::run() realmente limitado a 5 argumentos como máximo?


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

Hay 5 argumentos que la función puede tomar


Por un lado, puede usar std::bind o boost::bind para pasar más de 5 argumentos (ilimitado en el caso de C ++ 11):

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

Por otro lado, 5 argumentos deberían ser suficientes para cada función. Es posible que desee reconsiderar su diseño para disminuir el número de parámetros de función. Puede pasar algún objeto para funcionar en su lugar.

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

Tampoco olvide que Concurrent :: run puede colgarse a veces sin ninguna razón en compilaciones anteriores a 5.3.