QtConcurrent :: run () не может обрабатывать более 5 аргументов?

Я получаю ошибку компиляции при передаче функции с 6 параметрами или более 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)'

Это должно быть так? Является QtConcurrent::run() не более 5 аргументов?

5

Решение

Увидеть 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 аргументов, которые может принимать функция

8

Другие решения

С одной стороны, вы можете использовать std::bind или же boost::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);

Также не забывайте, что Concurrent :: run может подвешенный иногда без причины в сборках до 5.3.

6

По вопросам рекламы [email protected]