将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个参数吗?
答案 0 :(得分: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个参数
答案 1 :(得分:6)
一方面,您可以使用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}版本中没有任何理由可以hung。