QtConcurrent
Trial to use Doxygen to generate UML class diagram of QtConcurrent module.
qtconcurrentrun.h
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtConcurrent module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 // Generated code, do not edit! Use generator at tools/qtconcurrent/generaterun/
41 #ifndef QTCONCURRENT_RUN_H
42 #define QTCONCURRENT_RUN_H
43 
44 #include <QtConcurrent/qtconcurrentcompilertest.h>
45 
46 #if !defined(QT_NO_CONCURRENT) || defined(Q_CLANG_QDOC)
47 
48 #include <QtConcurrent/qtconcurrentrunbase.h>
49 #include <QtConcurrent/qtconcurrentstoredfunctioncall.h>
50 
51 QT_BEGIN_NAMESPACE
52 
53 #ifdef Q_CLANG_QDOC
54 
55 typedef int Function;
56 
57 namespace QtConcurrent {
58 
59  template <typename T>
60  QFuture<T> run(Function function, ...);
61 
62  template <typename T>
63  QFuture<T> run(QThreadPool *pool, Function function, ...);
64 
65 } // namespace QtConcurrent
66 
67 #else
68 
69 namespace QtConcurrent {
70 
71 template <typename T>
72 QFuture<T> run(T (*functionPointer)())
73 {
74  return (new StoredFunctorCall0<T, T (*)()>(functionPointer))->start();
75 }
76 template <typename T, typename Param1, typename Arg1>
77 QFuture<T> run(T (*functionPointer)(Param1), const Arg1 &arg1)
78 {
79  return (new StoredFunctorCall1<T, T (*)(Param1), Arg1>(functionPointer, arg1))->start();
80 }
81 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2>
82 QFuture<T> run(T (*functionPointer)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
83 {
84  return (new StoredFunctorCall2<T, T (*)(Param1, Param2), Arg1, Arg2>(functionPointer, arg1, arg2))->start();
85 }
86 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
87 QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
88 {
89  return (new StoredFunctorCall3<T, T (*)(Param1, Param2, Param3), Arg1, Arg2, Arg3>(functionPointer, arg1, arg2, arg3))->start();
90 }
91 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
92 QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
93 {
94  return (new StoredFunctorCall4<T, T (*)(Param1, Param2, Param3, Param4), Arg1, Arg2, Arg3, Arg4>(functionPointer, arg1, arg2, arg3, arg4))->start();
95 }
96 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
97 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)
98 {
99  return (new StoredFunctorCall5<T, T (*)(Param1, Param2, Param3, Param4, Param5), Arg1, Arg2, Arg3, Arg4, Arg5>(functionPointer, arg1, arg2, arg3, arg4, arg5))->start();
100 }
101 
102 #if defined(Q_COMPILER_DECLTYPE) && defined(Q_COMPILER_AUTO_FUNCTION)
103 
104 template <typename Functor>
105 auto run(Functor functor) -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor())>>::type
106 {
107  typedef decltype(functor()) result_type;
108  return (new StoredFunctorCall0<result_type, Functor>(functor))->start();
109 }
110 
111 template <typename Functor, typename Arg1>
112 auto run(Functor functor, const Arg1 &arg1)
113  -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1))>>::type
114 {
115  typedef decltype(functor(arg1)) result_type;
116  return (new StoredFunctorCall1<result_type, Functor, Arg1>(functor, arg1))->start();
117 }
118 
119 template <typename Functor, typename Arg1, typename Arg2>
120 auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2)
121  -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2))>>::type
122 {
123  typedef decltype(functor(arg1, arg2)) result_type;
124  return (new StoredFunctorCall2<result_type, Functor, Arg1, Arg2>(functor, arg1, arg2))->start();
125 }
126 
127 template <typename Functor, typename Arg1, typename Arg2, typename Arg3>
128 auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
129  -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3))>>::type
130 {
131  typedef decltype(functor(arg1, arg2, arg3)) result_type;
132  return (new StoredFunctorCall3<result_type, Functor, Arg1, Arg2, Arg3>(functor, arg1, arg2, arg3))->start();
133 }
134 
135 template <typename Functor, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
136 auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
137  -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3, arg4))>>::type
138 {
139  typedef decltype(functor(arg1, arg2, arg3, arg4)) result_type;
140  return (new StoredFunctorCall4<result_type, Functor, Arg1, Arg2, Arg3, Arg4>(functor, arg1, arg2, arg3, arg4))->start();
141 }
142 
143 template <typename Functor, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
144 auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
145  -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3, arg4, arg5))>>::type
146 {
147  typedef decltype(functor(arg1, arg2, arg3, arg4, arg5)) result_type;
148  return (new StoredFunctorCall5<result_type, Functor, Arg1, Arg2, Arg3, Arg4, Arg5>(functor, arg1, arg2, arg3, arg4, arg5))->start();
149 }
150 
151 #endif
152 
153 template <typename FunctionObject>
154 QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject)
155 {
157 }
158 template <typename FunctionObject, typename Arg1>
159 QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1)
160 {
161  return (new StoredFunctorCall1<typename FunctionObject::result_type, FunctionObject, Arg1>(functionObject, arg1))->start();
162 }
163 template <typename FunctionObject, typename Arg1, typename Arg2>
164 QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2)
165 {
166  return (new StoredFunctorCall2<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2>(functionObject, arg1, arg2))->start();
167 }
168 template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3>
169 QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
170 {
171  return (new StoredFunctorCall3<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3>(functionObject, arg1, arg2, arg3))->start();
172 }
173 template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
174 QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
175 {
176  return (new StoredFunctorCall4<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4>(functionObject, arg1, arg2, arg3, arg4))->start();
177 }
178 template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
179 QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
180 {
181  return (new StoredFunctorCall5<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4, Arg5>(functionObject, arg1, arg2, arg3, arg4, arg5))->start();
182 }
183 
184 template <typename FunctionObject>
185 QFuture<typename FunctionObject::result_type> run(FunctionObject *functionObject)
186 {
188 }
189 template <typename FunctionObject, typename Arg1>
190 QFuture<typename FunctionObject::result_type> run(FunctionObject *functionObject, const Arg1 &arg1)
191 {
193 }
194 template <typename FunctionObject, typename Arg1, typename Arg2>
195 QFuture<typename FunctionObject::result_type> run(FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2)
196 {
198 }
199 template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3>
200 QFuture<typename FunctionObject::result_type> run(FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
201 {
202  return (new typename SelectStoredFunctorPointerCall3<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3>::type(functionObject, arg1, arg2, arg3))->start();
203 }
204 template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
205 QFuture<typename FunctionObject::result_type> run(FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
206 {
207  return (new typename SelectStoredFunctorPointerCall4<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4>::type(functionObject, arg1, arg2, arg3, arg4))->start();
208 }
209 template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
210 QFuture<typename FunctionObject::result_type> run(FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
211 {
212  return (new typename SelectStoredFunctorPointerCall5<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4, Arg5>::type(functionObject, arg1, arg2, arg3, arg4, arg5))->start();
213 }
214 
215 template <typename T, typename Class>
216 QFuture<T> run(const Class &object, T (Class::*fn)())
217 {
218  return (new typename SelectStoredMemberFunctionCall0<T, Class>::type(fn, object))->start();
219 }
220 template <typename T, typename Class, typename Param1, typename Arg1>
221 QFuture<T> run(const Class &object, T (Class::*fn)(Param1), const Arg1 &arg1)
222 {
223  return (new typename SelectStoredMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
224 }
225 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
226 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
227 {
228  return (new typename SelectStoredMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
229 }
230 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
231 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
232 {
233  return (new typename SelectStoredMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
234 }
235 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
236 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
237 {
238  return (new typename SelectStoredMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
239 }
240 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
241 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
242 {
243  return (new typename SelectStoredMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
244 }
245 
246 template <typename T, typename Class>
247 QFuture<T> run(const Class &object, T (Class::*fn)() const)
248 {
249  return (new typename SelectStoredConstMemberFunctionCall0<T, Class>::type(fn, object))->start();
250 }
251 template <typename T, typename Class, typename Param1, typename Arg1>
252 QFuture<T> run(const Class &object, T (Class::*fn)(Param1) const, const Arg1 &arg1)
253 {
254  return (new typename SelectStoredConstMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
255 }
256 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
257 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2) const, const Arg1 &arg1, const Arg2 &arg2)
258 {
259  return (new typename SelectStoredConstMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
260 }
261 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
262 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
263 {
264  return (new typename SelectStoredConstMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
265 }
266 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
267 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
268 {
269  return (new typename SelectStoredConstMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
270 }
271 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
272 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
273 {
275 }
276 
277 template <typename T, typename Class>
278 QFuture<T> run(Class *object, T (Class::*fn)())
279 {
280  return (new typename SelectStoredMemberFunctionPointerCall0<T, Class>::type(fn, object))->start();
281 }
282 template <typename T, typename Class, typename Param1, typename Arg1>
283 QFuture<T> run(Class *object, T (Class::*fn)(Param1), const Arg1 &arg1)
284 {
285  return (new typename SelectStoredMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
286 }
287 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
288 QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
289 {
290  return (new typename SelectStoredMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
291 }
292 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
293 QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
294 {
295  return (new typename SelectStoredMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
296 }
297 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
298 QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
299 {
300  return (new typename SelectStoredMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
301 }
302 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
303 QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
304 {
306 }
307 
308 template <typename T, typename Class>
309 QFuture<T> run(const Class *object, T (Class::*fn)() const)
310 {
311  return (new typename SelectStoredConstMemberFunctionPointerCall0<T, Class>::type(fn, object))->start();
312 }
313 template <typename T, typename Class, typename Param1, typename Arg1>
314 QFuture<T> run(const Class *object, T (Class::*fn)(Param1) const, const Arg1 &arg1)
315 {
316  return (new typename SelectStoredConstMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
317 }
318 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
319 QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2) const, const Arg1 &arg1, const Arg2 &arg2)
320 {
321  return (new typename SelectStoredConstMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
322 }
323 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
324 QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2, Param3) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
325 {
326  return (new typename SelectStoredConstMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
327 }
328 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
329 QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
330 {
332 }
333 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
334 QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
335 {
337 }
338 
339 // ...and the same with a QThreadPool *pool argument...
340 // generate from the above by c'n'p and s/run(/run(QThreadPool *pool, / and s/start()/start(pool)/
341 
342 template <typename T>
343 QFuture<T> run(QThreadPool *pool, T (*functionPointer)())
344 {
345  return (new StoredFunctorCall0<T, T (*)()>(functionPointer))->start(pool);
346 }
347 template <typename T, typename Param1, typename Arg1>
348 QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1), const Arg1 &arg1)
349 {
350  return (new StoredFunctorCall1<T, T (*)(Param1), Arg1>(functionPointer, arg1))->start(pool);
351 }
352 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2>
353 QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
354 {
355  return (new StoredFunctorCall2<T, T (*)(Param1, Param2), Arg1, Arg2>(functionPointer, arg1, arg2))->start(pool);
356 }
357 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
358 QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
359 {
360  return (new StoredFunctorCall3<T, T (*)(Param1, Param2, Param3), Arg1, Arg2, Arg3>(functionPointer, arg1, arg2, arg3))->start(pool);
361 }
362 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
363 QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
364 {
365  return (new StoredFunctorCall4<T, T (*)(Param1, Param2, Param3, Param4), Arg1, Arg2, Arg3, Arg4>(functionPointer, arg1, arg2, arg3, arg4))->start(pool);
366 }
367 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
368 QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
369 {
370  return (new StoredFunctorCall5<T, T (*)(Param1, Param2, Param3, Param4, Param5), Arg1, Arg2, Arg3, Arg4, Arg5>(functionPointer, arg1, arg2, arg3, arg4, arg5))->start(pool);
371 }
372 
373 #if defined(Q_COMPILER_DECLTYPE) && defined(Q_COMPILER_AUTO_FUNCTION)
374 
375 template <typename Functor>
376 auto run(QThreadPool *pool, Functor functor) -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor())>>::type
377 {
378  typedef decltype(functor()) result_type;
379  return (new StoredFunctorCall0<result_type, Functor>(functor))->start(pool);
380 }
381 
382 template <typename Functor, typename Arg1>
383 auto run(QThreadPool *pool, Functor functor, const Arg1 &arg1)
384  -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1))>>::type
385 {
386  typedef decltype(functor(arg1)) result_type;
387  return (new StoredFunctorCall1<result_type, Functor, Arg1>(functor, arg1))->start(pool);
388 }
389 
390 template <typename Functor, typename Arg1, typename Arg2>
391 auto run(QThreadPool *pool, Functor functor, const Arg1 &arg1, const Arg2 &arg2)
392  -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2))>>::type
393 {
394  typedef decltype(functor(arg1, arg2)) result_type;
395  return (new StoredFunctorCall2<result_type, Functor, Arg1, Arg2>(functor, arg1, arg2))->start(pool);
396 }
397 
398 template <typename Functor, typename Arg1, typename Arg2, typename Arg3>
399 auto run(QThreadPool *pool, Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
400  -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3))>>::type
401 {
402  typedef decltype(functor(arg1, arg2, arg3)) result_type;
403  return (new StoredFunctorCall3<result_type, Functor, Arg1, Arg2, Arg3>(functor, arg1, arg2, arg3))->start(pool);
404 }
405 
406 template <typename Functor, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
407 auto run(QThreadPool *pool, Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
408  -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3, arg4))>>::type
409 {
410  typedef decltype(functor(arg1, arg2, arg3, arg4)) result_type;
411  return (new StoredFunctorCall4<result_type, Functor, Arg1, Arg2, Arg3, Arg4>(functor, arg1, arg2, arg3, arg4))->start(pool);
412 }
413 
414 template <typename Functor, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
415 auto run(QThreadPool *pool, Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
416  -> typename std::enable_if<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3, arg4, arg5))>>::type
417 {
418  typedef decltype(functor(arg1, arg2, arg3, arg4, arg5)) result_type;
419  return (new StoredFunctorCall5<result_type, Functor, Arg1, Arg2, Arg3, Arg4, Arg5>(functor, arg1, arg2, arg3, arg4, arg5))->start(pool);
420 }
421 
422 #endif
423 
424 template <typename FunctionObject>
425 QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject functionObject)
426 {
427  return (new StoredFunctorCall0<typename FunctionObject::result_type, FunctionObject>(functionObject))->start(pool);
428 }
429 template <typename FunctionObject, typename Arg1>
430 QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject functionObject, const Arg1 &arg1)
431 {
432  return (new StoredFunctorCall1<typename FunctionObject::result_type, FunctionObject, Arg1>(functionObject, arg1))->start(pool);
433 }
434 template <typename FunctionObject, typename Arg1, typename Arg2>
435 QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2)
436 {
437  return (new StoredFunctorCall2<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2>(functionObject, arg1, arg2))->start(pool);
438 }
439 template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3>
440 QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
441 {
442  return (new StoredFunctorCall3<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3>(functionObject, arg1, arg2, arg3))->start(pool);
443 }
444 template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
445 QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
446 {
447  return (new StoredFunctorCall4<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4>(functionObject, arg1, arg2, arg3, arg4))->start(pool);
448 }
449 template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
450 QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
451 {
452  return (new StoredFunctorCall5<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4, Arg5>(functionObject, arg1, arg2, arg3, arg4, arg5))->start(pool);
453 }
454 
455 template <typename FunctionObject>
456 QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject *functionObject)
457 {
459 }
460 template <typename FunctionObject, typename Arg1>
461 QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject *functionObject, const Arg1 &arg1)
462 {
463  return (new typename SelectStoredFunctorPointerCall1<typename FunctionObject::result_type, FunctionObject, Arg1>::type(functionObject, arg1))->start(pool);
464 }
465 template <typename FunctionObject, typename Arg1, typename Arg2>
466 QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2)
467 {
468  return (new typename SelectStoredFunctorPointerCall2<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2>::type(functionObject, arg1, arg2))->start(pool);
469 }
470 template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3>
471 QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
472 {
473  return (new typename SelectStoredFunctorPointerCall3<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3>::type(functionObject, arg1, arg2, arg3))->start(pool);
474 }
475 template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
476 QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
477 {
478  return (new typename SelectStoredFunctorPointerCall4<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4>::type(functionObject, arg1, arg2, arg3, arg4))->start(pool);
479 }
480 template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
481 QFuture<typename FunctionObject::result_type> run(QThreadPool *pool, FunctionObject *functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
482 {
483  return (new typename SelectStoredFunctorPointerCall5<typename FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4, Arg5>::type(functionObject, arg1, arg2, arg3, arg4, arg5))->start(pool);
484 }
485 
486 template <typename T, typename Class>
487 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)())
488 {
489  return (new typename SelectStoredMemberFunctionCall0<T, Class>::type(fn, object))->start(pool);
490 }
491 template <typename T, typename Class, typename Param1, typename Arg1>
492 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1), const Arg1 &arg1)
493 {
494  return (new typename SelectStoredMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
495 }
496 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
497 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
498 {
499  return (new typename SelectStoredMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
500 }
501 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
502 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
503 {
504  return (new typename SelectStoredMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
505 }
506 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
507 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
508 {
509  return (new typename SelectStoredMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
510 }
511 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
512 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
513 {
514  return (new typename SelectStoredMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
515 }
516 
517 template <typename T, typename Class>
518 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)() const)
519 {
520  return (new typename SelectStoredConstMemberFunctionCall0<T, Class>::type(fn, object))->start(pool);
521 }
522 template <typename T, typename Class, typename Param1, typename Arg1>
523 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1) const, const Arg1 &arg1)
524 {
525  return (new typename SelectStoredConstMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
526 }
527 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
528 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2) const, const Arg1 &arg1, const Arg2 &arg2)
529 {
530  return (new typename SelectStoredConstMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
531 }
532 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
533 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
534 {
535  return (new typename SelectStoredConstMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
536 }
537 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
538 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
539 {
540  return (new typename SelectStoredConstMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
541 }
542 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
543 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
544 {
545  return (new typename SelectStoredConstMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
546 }
547 
548 template <typename T, typename Class>
549 QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)())
550 {
551  return (new typename SelectStoredMemberFunctionPointerCall0<T, Class>::type(fn, object))->start(pool);
552 }
553 template <typename T, typename Class, typename Param1, typename Arg1>
554 QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1), const Arg1 &arg1)
555 {
556  return (new typename SelectStoredMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
557 }
558 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
559 QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
560 {
561  return (new typename SelectStoredMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
562 }
563 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
564 QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
565 {
566  return (new typename SelectStoredMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
567 }
568 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
569 QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
570 {
571  return (new typename SelectStoredMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
572 }
573 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
574 QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
575 {
576  return (new typename SelectStoredMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
577 }
578 
579 template <typename T, typename Class>
580 QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)() const)
581 {
582  return (new typename SelectStoredConstMemberFunctionPointerCall0<T, Class>::type(fn, object))->start(pool);
583 }
584 template <typename T, typename Class, typename Param1, typename Arg1>
585 QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1) const, const Arg1 &arg1)
586 {
587  return (new typename SelectStoredConstMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
588 }
589 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
590 QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2) const, const Arg1 &arg1, const Arg2 &arg2)
591 {
592  return (new typename SelectStoredConstMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
593 }
594 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
595 QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2, Param3) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
596 {
597  return (new typename SelectStoredConstMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
598 }
599 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
600 QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
601 {
602  return (new typename SelectStoredConstMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
603 }
604 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
605 QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
606 {
608 }
609 
610 #if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510
611 template <typename T>
612 QFuture<T> run(T (*functionPointer)() noexcept)
613 {
614  return (new StoredFunctorCall0<T, T (*)() noexcept>(functionPointer))->start();
615 }
616 template <typename T, typename Param1, typename Arg1>
617 QFuture<T> run(T (*functionPointer)(Param1) noexcept, const Arg1 &arg1)
618 {
619  return (new StoredFunctorCall1<T, T (*)(Param1) noexcept, Arg1>(functionPointer, arg1))->start();
620 }
621 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2>
622 QFuture<T> run(T (*functionPointer)(Param1, Param2) noexcept, const Arg1 &arg1, const Arg2 &arg2)
623 {
624  return (new StoredFunctorCall2<T, T (*)(Param1, Param2) noexcept, Arg1, Arg2>(functionPointer, arg1, arg2))->start();
625 }
626 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
627 QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
628 {
629  return (new StoredFunctorCall3<T, T (*)(Param1, Param2, Param3) noexcept, Arg1, Arg2, Arg3>(functionPointer, arg1, arg2, arg3))->start();
630 }
631 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
632 QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3, Param4) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
633 {
634  return (new StoredFunctorCall4<T, T (*)(Param1, Param2, Param3, Param4) noexcept, Arg1, Arg2, Arg3, Arg4>(functionPointer, arg1, arg2, arg3, arg4))->start();
635 }
636 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
637 QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3, Param4, Param5) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
638 {
639  return (new StoredFunctorCall5<T, T (*)(Param1, Param2, Param3, Param4, Param5) noexcept, Arg1, Arg2, Arg3, Arg4, Arg5>(functionPointer, arg1, arg2, arg3, arg4, arg5))->start();
640 }
641 
642 template <typename T, typename Class>
643 QFuture<T> run(const Class &object, T (Class::*fn)() noexcept)
644 {
645  return (new typename SelectStoredNoExceptMemberFunctionCall0<T, Class>::type(fn, object))->start();
646 }
647 template <typename T, typename Class, typename Param1, typename Arg1>
648 QFuture<T> run(const Class &object, T (Class::*fn)(Param1) noexcept, const Arg1 &arg1)
649 {
650  return (new typename SelectStoredNoExceptMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
651 }
652 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
653 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2) noexcept, const Arg1 &arg1, const Arg2 &arg2)
654 {
655  return (new typename SelectStoredNoExceptMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
656 }
657 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
658 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
659 {
660  return (new typename SelectStoredNoExceptMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
661 }
662 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
663 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
664 {
665  return (new typename SelectStoredNoExceptMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
666 }
667 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
668 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
669 {
670  return (new typename SelectStoredNoExceptMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
671 }
672 
673 template <typename T, typename Class>
674 QFuture<T> run(const Class &object, T (Class::*fn)() const noexcept)
675 {
676  return (new typename SelectStoredConstNoExceptMemberFunctionCall0<T, Class>::type(fn, object))->start();
677 }
678 template <typename T, typename Class, typename Param1, typename Arg1>
679 QFuture<T> run(const Class &object, T (Class::*fn)(Param1) const noexcept, const Arg1 &arg1)
680 {
681  return (new typename SelectStoredConstNoExceptMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
682 }
683 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
684 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2) const noexcept, const Arg1 &arg1, const Arg2 &arg2)
685 {
686  return (new typename SelectStoredConstNoExceptMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
687 }
688 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
689 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
690 {
691  return (new typename SelectStoredConstNoExceptMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
692 }
693 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
694 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
695 {
696  return (new typename SelectStoredConstNoExceptMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
697 }
698 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
699 QFuture<T> run(const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
700 {
701  return (new typename SelectStoredConstNoExceptMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
702 }
703 
704 template <typename T, typename Class>
705 QFuture<T> run(Class *object, T (Class::*fn)() noexcept)
706 {
707  return (new typename SelectStoredNoExceptMemberFunctionPointerCall0<T, Class>::type(fn, object))->start();
708 }
709 template <typename T, typename Class, typename Param1, typename Arg1>
710 QFuture<T> run(Class *object, T (Class::*fn)(Param1) noexcept, const Arg1 &arg1)
711 {
712  return (new typename SelectStoredNoExceptMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
713 }
714 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
715 QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2) noexcept, const Arg1 &arg1, const Arg2 &arg2)
716 {
717  return (new typename SelectStoredNoExceptMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
718 }
719 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
720 QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2, Param3) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
721 {
722  return (new typename SelectStoredNoExceptMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
723 }
724 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
725 QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
726 {
727  return (new typename SelectStoredNoExceptMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
728 }
729 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
730 QFuture<T> run(Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
731 {
732  return (new typename SelectStoredNoExceptMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
733 }
734 
735 template <typename T, typename Class>
736 QFuture<T> run(const Class *object, T (Class::*fn)() const noexcept)
737 {
738  return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall0<T, Class>::type(fn, object))->start();
739 }
740 template <typename T, typename Class, typename Param1, typename Arg1>
741 QFuture<T> run(const Class *object, T (Class::*fn)(Param1) const noexcept, const Arg1 &arg1)
742 {
743  return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start();
744 }
745 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
746 QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2) const noexcept, const Arg1 &arg1, const Arg2 &arg2)
747 {
748  return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start();
749 }
750 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
751 QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2, Param3) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
752 {
753  return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start();
754 }
755 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
756 QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
757 {
758  return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start();
759 }
760 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
761 QFuture<T> run(const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
762 {
763  return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start();
764 }
765 template <typename T>
766 QFuture<T> run(QThreadPool *pool, T (*functionPointer)() noexcept)
767 {
768  return (new StoredFunctorCall0<T, T (*)() noexcept>(functionPointer))->start(pool);
769 }
770 template <typename T, typename Param1, typename Arg1>
771 QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1) noexcept, const Arg1 &arg1)
772 {
773  return (new StoredFunctorCall1<T, T (*)(Param1) noexcept, Arg1>(functionPointer, arg1))->start(pool);
774 }
775 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2>
776 QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2) noexcept, const Arg1 &arg1, const Arg2 &arg2)
777 {
778  return (new StoredFunctorCall2<T, T (*)(Param1, Param2) noexcept, Arg1, Arg2>(functionPointer, arg1, arg2))->start(pool);
779 }
780 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
781 QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2, Param3) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
782 {
783  return (new StoredFunctorCall3<T, T (*)(Param1, Param2, Param3) noexcept, Arg1, Arg2, Arg3>(functionPointer, arg1, arg2, arg3))->start(pool);
784 }
785 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
786 QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2, Param3, Param4) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
787 {
788  return (new StoredFunctorCall4<T, T (*)(Param1, Param2, Param3, Param4) noexcept, Arg1, Arg2, Arg3, Arg4>(functionPointer, arg1, arg2, arg3, arg4))->start(pool);
789 }
790 template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
791 QFuture<T> run(QThreadPool *pool, T (*functionPointer)(Param1, Param2, Param3, Param4, Param5) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
792 {
793  return (new StoredFunctorCall5<T, T (*)(Param1, Param2, Param3, Param4, Param5) noexcept, Arg1, Arg2, Arg3, Arg4, Arg5>(functionPointer, arg1, arg2, arg3, arg4, arg5))->start(pool);
794 }
795 
796 template <typename T, typename Class>
797 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)() noexcept)
798 {
799  return (new typename SelectStoredNoExceptMemberFunctionCall0<T, Class>::type(fn, object))->start(pool);
800 }
801 template <typename T, typename Class, typename Param1, typename Arg1>
802 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1) noexcept, const Arg1 &arg1)
803 {
804  return (new typename SelectStoredNoExceptMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
805 }
806 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
807 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2) noexcept, const Arg1 &arg1, const Arg2 &arg2)
808 {
809  return (new typename SelectStoredNoExceptMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
810 }
811 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
812 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
813 {
814  return (new typename SelectStoredNoExceptMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
815 }
816 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
817 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
818 {
819  return (new typename SelectStoredNoExceptMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
820 }
821 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
822 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
823 {
824  return (new typename SelectStoredNoExceptMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
825 }
826 
827 template <typename T, typename Class>
828 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)() const noexcept)
829 {
830  return (new typename SelectStoredConstNoExceptMemberFunctionCall0<T, Class>::type(fn, object))->start(pool);
831 }
832 template <typename T, typename Class, typename Param1, typename Arg1>
833 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1) const noexcept, const Arg1 &arg1)
834 {
835  return (new typename SelectStoredConstNoExceptMemberFunctionCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
836 }
837 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
838 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2) const noexcept, const Arg1 &arg1, const Arg2 &arg2)
839 {
840  return (new typename SelectStoredConstNoExceptMemberFunctionCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
841 }
842 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
843 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
844 {
845  return (new typename SelectStoredConstNoExceptMemberFunctionCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
846 }
847 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
848 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
849 {
850  return (new typename SelectStoredConstNoExceptMemberFunctionCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
851 }
852 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
853 QFuture<T> run(QThreadPool *pool, const Class &object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
854 {
855  return (new typename SelectStoredConstNoExceptMemberFunctionCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
856 }
857 
858 template <typename T, typename Class>
859 QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)() noexcept)
860 {
861  return (new typename SelectStoredNoExceptMemberFunctionPointerCall0<T, Class>::type(fn, object))->start(pool);
862 }
863 template <typename T, typename Class, typename Param1, typename Arg1>
864 QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1) noexcept, const Arg1 &arg1)
865 {
866  return (new typename SelectStoredNoExceptMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
867 }
868 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
869 QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2) noexcept, const Arg1 &arg1, const Arg2 &arg2)
870 {
871  return (new typename SelectStoredNoExceptMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
872 }
873 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
874 QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2, Param3) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
875 {
876  return (new typename SelectStoredNoExceptMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
877 }
878 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
879 QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
880 {
881  return (new typename SelectStoredNoExceptMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
882 }
883 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
884 QFuture<T> run(QThreadPool *pool, Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
885 {
886  return (new typename SelectStoredNoExceptMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
887 }
888 
889 template <typename T, typename Class>
890 QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)() const noexcept)
891 {
892  return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall0<T, Class>::type(fn, object))->start(pool);
893 }
894 template <typename T, typename Class, typename Param1, typename Arg1>
895 QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1) const noexcept, const Arg1 &arg1)
896 {
897  return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall1<T, Class, Param1, Arg1>::type(fn, object, arg1))->start(pool);
898 }
899 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
900 QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2) const noexcept, const Arg1 &arg1, const Arg2 &arg2)
901 {
902  return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall2<T, Class, Param1, Arg1, Param2, Arg2>::type(fn, object, arg1, arg2))->start(pool);
903 }
904 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
905 QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2, Param3) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
906 {
907  return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall3<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>::type(fn, object, arg1, arg2, arg3))->start(pool);
908 }
909 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
910 QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
911 {
912  return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall4<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4>::type(fn, object, arg1, arg2, arg3, arg4))->start(pool);
913 }
914 template <typename T, typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
915 QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Param2, Param3, Param4, Param5) const noexcept, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
916 {
917  return (new typename SelectStoredConstNoExceptMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>::type(fn, object, arg1, arg2, arg3, arg4, arg5))->start(pool);
918 }
919 #endif
920 
921 } //namespace QtConcurrent
922 
923 #endif // Q_CLANG_QDOC
924 
925 QT_END_NAMESPACE
926 
927 #endif // QT_NO_CONCURRENT
928 
929 #endif
SelectSpecialization< T >::template Type< StoredFunctorPointerCall3< T, FunctionPointer, Arg1, Arg2, Arg3 >, VoidStoredFunctorPointerCall3< T, FunctionPointer, Arg1, Arg2, Arg3 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1186
SelectSpecialization< T >::template Type< StoredMemberFunctionPointerCall4< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4 >, VoidStoredMemberFunctionPointerCall4< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1665
QThreadPool pool
Definition: src_concurrent_qtconcurrentrun.cpp:59
SelectSpecialization< T >::template Type< StoredFunctorPointerCall2< T, FunctionPointer, Arg1, Arg2 >, VoidStoredFunctorPointerCall2< T, FunctionPointer, Arg1, Arg2 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:824
SelectSpecialization< T >::template Type< StoredFunctorPointerCall5< T, FunctionPointer, Arg1, Arg2, Arg3, Arg4, Arg5 >, VoidStoredFunctorPointerCall5< T, FunctionPointer, Arg1, Arg2, Arg3, Arg4, Arg5 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1910
Definition: qtconcurrentstoredfunctioncall.h:1504
QFuture< T > run(T(*functionPointer)())
Definition: qtconcurrentrun.h:72
SelectSpecialization< T >::template Type< StoredMemberFunctionPointerCall0< T, Class >, VoidStoredMemberFunctionPointerCall0< T, Class > >::type type
Definition: qtconcurrentstoredfunctioncall.h:217
Definition: qtconcurrentstoredfunctioncall.h:56
SelectSpecialization< T >::template Type< StoredConstMemberFunctionPointerCall3< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3 >, VoidStoredConstMemberFunctionPointerCall3< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1342
SelectSpecialization< T >::template Type< StoredConstMemberFunctionCall0< T, Class >, VoidStoredConstMemberFunctionCall0< T, Class > >::type type
Definition: qtconcurrentstoredfunctioncall.h:178
SelectSpecialization< T >::template Type< StoredMemberFunctionPointerCall2< T, Class, Param1, Arg1, Param2, Arg2 >, VoidStoredMemberFunctionPointerCall2< T, Class, Param1, Arg1, Param2, Arg2 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:941
SelectSpecialization< T >::template Type< StoredMemberFunctionCall5< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5 >, VoidStoredMemberFunctionCall5< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1949
SelectSpecialization< T >::template Type< StoredMemberFunctionCall0< T, Class >, VoidStoredMemberFunctionCall0< T, Class > >::type type
Definition: qtconcurrentstoredfunctioncall.h:139
SelectSpecialization< T >::template Type< StoredFunctorPointerCall4< T, FunctionPointer, Arg1, Arg2, Arg3, Arg4 >, VoidStoredFunctorPointerCall4< T, FunctionPointer, Arg1, Arg2, Arg3, Arg4 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1548
Definition: qtconcurrentstoredfunctioncall.h:1866
SelectSpecialization< T >::template Type< StoredConstMemberFunctionCall5< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5 >, VoidStoredConstMemberFunctionCall5< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1988
SelectSpecialization< T >::template Type< StoredFunctorPointerCall1< T, FunctionPointer, Arg1 >, VoidStoredFunctorPointerCall1< T, FunctionPointer, Arg1 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:462
SelectSpecialization< T >::template Type< StoredFunctorPointerCall0< T, FunctionPointer >, VoidStoredFunctorPointerCall0< T, FunctionPointer > >::type type
Definition: qtconcurrentstoredfunctioncall.h:100
SelectSpecialization< T >::template Type< StoredConstMemberFunctionPointerCall2< T, Class, Param1, Arg1, Param2, Arg2 >, VoidStoredConstMemberFunctionPointerCall2< T, Class, Param1, Arg1, Param2, Arg2 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:980
SelectSpecialization< T >::template Type< StoredMemberFunctionPointerCall5< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5 >, VoidStoredMemberFunctionPointerCall5< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:2027
SelectSpecialization< T >::template Type< StoredMemberFunctionCall2< T, Class, Param1, Arg1, Param2, Arg2 >, VoidStoredMemberFunctionCall2< T, Class, Param1, Arg1, Param2, Arg2 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:863
SelectSpecialization< T >::template Type< StoredConstMemberFunctionPointerCall0< T, Class >, VoidStoredConstMemberFunctionPointerCall0< T, Class > >::type type
Definition: qtconcurrentstoredfunctioncall.h:256
SelectSpecialization< T >::template Type< StoredMemberFunctionCall4< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4 >, VoidStoredMemberFunctionCall4< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1587
SelectSpecialization< T >::template Type< StoredConstMemberFunctionCall2< T, Class, Param1, Arg1, Param2, Arg2 >, VoidStoredConstMemberFunctionCall2< T, Class, Param1, Arg1, Param2, Arg2 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:902
Definition: qtconcurrentstoredfunctioncall.h:418
SelectSpecialization< T >::template Type< StoredMemberFunctionPointerCall1< T, Class, Param1, Arg1 >, VoidStoredMemberFunctionPointerCall1< T, Class, Param1, Arg1 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:579
SelectSpecialization< T >::template Type< StoredConstMemberFunctionPointerCall4< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4 >, VoidStoredConstMemberFunctionPointerCall4< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1704
SelectSpecialization< T >::template Type< StoredConstMemberFunctionPointerCall5< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5 >, VoidStoredConstMemberFunctionPointerCall5< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:2066
The QtConcurrent namespace provides high-level APIs that make it possible to write multi-threaded pro...
Definition: qtconcurrentexception.h:51
SelectSpecialization< T >::template Type< StoredConstMemberFunctionPointerCall1< T, Class, Param1, Arg1 >, VoidStoredConstMemberFunctionPointerCall1< T, Class, Param1, Arg1 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:618
Definition: qtconcurrentstoredfunctioncall.h:780
SelectSpecialization< T >::template Type< StoredMemberFunctionCall3< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3 >, VoidStoredMemberFunctionCall3< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1225
SelectSpecialization< T >::template Type< StoredConstMemberFunctionCall1< T, Class, Param1, Arg1 >, VoidStoredConstMemberFunctionCall1< T, Class, Param1, Arg1 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:540
SelectSpecialization< T >::template Type< StoredConstMemberFunctionCall3< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3 >, VoidStoredConstMemberFunctionCall3< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1264
SelectSpecialization< T >::template Type< StoredConstMemberFunctionCall4< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4 >, VoidStoredConstMemberFunctionCall4< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1626
Definition: qtconcurrentstoredfunctioncall.h:1142
SelectSpecialization< T >::template Type< StoredMemberFunctionCall1< T, Class, Param1, Arg1 >, VoidStoredMemberFunctionCall1< T, Class, Param1, Arg1 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:501
SelectSpecialization< T >::template Type< StoredMemberFunctionPointerCall3< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3 >, VoidStoredMemberFunctionPointerCall3< T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3 > >::type type
Definition: qtconcurrentstoredfunctioncall.h:1303