17 #include <type_traits>
25 CallableContainer(
void);
26 virtual ~CallableContainer(
void);
27 virtual size_t getNumArgs(
void)
const = 0;
28 virtual const std::type_info &type(
const int argNo) = 0;
29 virtual Object call(
const Object *args) = 0;
34 template <
typename ValueType>
44 template <
typename ReturnType>
45 struct CallableFunctionContainer0 : Detail::CallableContainer
47 template <
typename FcnType>
48 CallableFunctionContainer0(
const FcnType &fcn):
54 size_t getNumArgs(
void)
const
59 const std::type_info &type(
const int )
61 return typeid(ReturnType);
64 Object call(
const Object * )
67 decltype(_fcn), std::is_void<ReturnType>::value
72 template <
typename FcnType,
bool Condition>
struct CallHelper;
73 template <
typename FcnType>
struct CallHelper<FcnType, false>
75 static Object call(
const FcnType &fcn)
80 template <
typename FcnType>
struct CallHelper<FcnType, true>
82 static Object call(
const FcnType &fcn)
84 fcn();
return Object();
88 std::function<ReturnType()> _fcn;
91 template <
typename ClassType>
92 ClassType CallableFactoryWrapper()
97 template <
typename ClassType>
98 ClassType *CallableFactoryNewWrapper()
100 return new ClassType();
103 template <
typename ClassType>
104 std::shared_ptr<ClassType> CallableFactorySharedWrapper()
106 return std::shared_ptr<ClassType>(
new ClassType());
111 template <
typename ReturnType,
typename A0>
112 struct CallableFunctionContainer1 : Detail::CallableContainer
114 template <
typename FcnType>
115 CallableFunctionContainer1(
const FcnType &fcn):
116 _fcn(std::bind(fcn, std::placeholders::_1))
121 size_t getNumArgs(
void)
const
126 const std::type_info &type(
const int argNo)
128 if (argNo == 0)
return typeid(A0);
129 return typeid(ReturnType);
132 Object call(
const Object * args)
134 auto &a0 = args[0].
extract<A0>();
136 decltype(_fcn), std::is_void<ReturnType>::value
141 template <
typename FcnType,
bool Condition>
struct CallHelper;
142 template <
typename FcnType>
struct CallHelper<FcnType, false>
144 static Object call(
const FcnType &fcn,
const A0 &a0)
149 template <
typename FcnType>
struct CallHelper<FcnType, true>
151 static Object call(
const FcnType &fcn,
const A0 &a0)
153 fcn(a0);
return Object();
157 std::function<ReturnType(A0)> _fcn;
160 template <
typename ClassType,
typename A0>
161 ClassType CallableFactoryWrapper(
const A0 &a0)
163 return ClassType(a0);
166 template <
typename ClassType,
typename A0>
167 ClassType *CallableFactoryNewWrapper(
const A0 &a0)
169 return new ClassType(a0);
172 template <
typename ClassType,
typename A0>
173 std::shared_ptr<ClassType> CallableFactorySharedWrapper(
const A0 &a0)
175 return std::shared_ptr<ClassType>(
new ClassType(a0));
180 template <
typename ReturnType,
typename A0,
typename A1>
181 struct CallableFunctionContainer2 : Detail::CallableContainer
183 template <
typename FcnType>
184 CallableFunctionContainer2(
const FcnType &fcn):
185 _fcn(std::bind(fcn, std::placeholders::_1, std::placeholders::_2))
190 size_t getNumArgs(
void)
const
195 const std::type_info &type(
const int argNo)
197 if (argNo == 0)
return typeid(A0);
198 if (argNo == 1)
return typeid(A1);
199 return typeid(ReturnType);
202 Object call(
const Object * args)
204 auto &a0 = args[0].
extract<A0>();
205 auto &a1 = args[1].extract<A1>();
207 decltype(_fcn), std::is_void<ReturnType>::value
208 >::call(_fcn, a0, a1);
212 template <
typename FcnType,
bool Condition>
struct CallHelper;
213 template <
typename FcnType>
struct CallHelper<FcnType, false>
215 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1)
220 template <
typename FcnType>
struct CallHelper<FcnType, true>
222 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1)
224 fcn(a0, a1);
return Object();
228 std::function<ReturnType(A0, A1)> _fcn;
231 template <
typename ClassType,
typename A0,
typename A1>
232 ClassType CallableFactoryWrapper(
const A0 &a0,
const A1 &a1)
234 return ClassType(a0, a1);
237 template <
typename ClassType,
typename A0,
typename A1>
238 ClassType *CallableFactoryNewWrapper(
const A0 &a0,
const A1 &a1)
240 return new ClassType(a0, a1);
243 template <
typename ClassType,
typename A0,
typename A1>
244 std::shared_ptr<ClassType> CallableFactorySharedWrapper(
const A0 &a0,
const A1 &a1)
246 return std::shared_ptr<ClassType>(
new ClassType(a0, a1));
251 template <
typename ReturnType,
typename A0,
typename A1,
typename A2>
252 struct CallableFunctionContainer3 : Detail::CallableContainer
254 template <
typename FcnType>
255 CallableFunctionContainer3(
const FcnType &fcn):
256 _fcn(std::bind(fcn, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3))
261 size_t getNumArgs(
void)
const
266 const std::type_info &type(
const int argNo)
268 if (argNo == 0)
return typeid(A0);
269 if (argNo == 1)
return typeid(A1);
270 if (argNo == 2)
return typeid(A2);
271 return typeid(ReturnType);
274 Object call(
const Object * args)
276 auto &a0 = args[0].
extract<A0>();
277 auto &a1 = args[1].extract<A1>();
278 auto &a2 = args[2].extract<A2>();
280 decltype(_fcn), std::is_void<ReturnType>::value
281 >::call(_fcn, a0, a1, a2);
285 template <
typename FcnType,
bool Condition>
struct CallHelper;
286 template <
typename FcnType>
struct CallHelper<FcnType, false>
288 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2)
293 template <
typename FcnType>
struct CallHelper<FcnType, true>
295 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2)
297 fcn(a0, a1, a2);
return Object();
301 std::function<ReturnType(A0, A1, A2)> _fcn;
304 template <
typename ClassType,
typename A0,
typename A1,
typename A2>
305 ClassType CallableFactoryWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2)
307 return ClassType(a0, a1, a2);
310 template <
typename ClassType,
typename A0,
typename A1,
typename A2>
311 ClassType *CallableFactoryNewWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2)
313 return new ClassType(a0, a1, a2);
316 template <
typename ClassType,
typename A0,
typename A1,
typename A2>
317 std::shared_ptr<ClassType> CallableFactorySharedWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2)
319 return std::shared_ptr<ClassType>(
new ClassType(a0, a1, a2));
324 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3>
325 struct CallableFunctionContainer4 : Detail::CallableContainer
327 template <
typename FcnType>
328 CallableFunctionContainer4(
const FcnType &fcn):
329 _fcn(std::bind(fcn, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4))
334 size_t getNumArgs(
void)
const
339 const std::type_info &type(
const int argNo)
341 if (argNo == 0)
return typeid(A0);
342 if (argNo == 1)
return typeid(A1);
343 if (argNo == 2)
return typeid(A2);
344 if (argNo == 3)
return typeid(A3);
345 return typeid(ReturnType);
348 Object call(
const Object * args)
350 auto &a0 = args[0].
extract<A0>();
351 auto &a1 = args[1].extract<A1>();
352 auto &a2 = args[2].extract<A2>();
353 auto &a3 = args[3].extract<A3>();
355 decltype(_fcn), std::is_void<ReturnType>::value
356 >::call(_fcn, a0, a1, a2, a3);
360 template <
typename FcnType,
bool Condition>
struct CallHelper;
361 template <
typename FcnType>
struct CallHelper<FcnType, false>
363 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3)
368 template <
typename FcnType>
struct CallHelper<FcnType, true>
370 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3)
372 fcn(a0, a1, a2, a3);
return Object();
376 std::function<ReturnType(A0, A1, A2, A3)> _fcn;
379 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
380 ClassType CallableFactoryWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3)
382 return ClassType(a0, a1, a2, a3);
385 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
386 ClassType *CallableFactoryNewWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3)
388 return new ClassType(a0, a1, a2, a3);
391 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
392 std::shared_ptr<ClassType> CallableFactorySharedWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3)
394 return std::shared_ptr<ClassType>(
new ClassType(a0, a1, a2, a3));
399 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
400 struct CallableFunctionContainer5 : Detail::CallableContainer
402 template <
typename FcnType>
403 CallableFunctionContainer5(
const FcnType &fcn):
404 _fcn(std::bind(fcn, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5))
409 size_t getNumArgs(
void)
const
414 const std::type_info &type(
const int argNo)
416 if (argNo == 0)
return typeid(A0);
417 if (argNo == 1)
return typeid(A1);
418 if (argNo == 2)
return typeid(A2);
419 if (argNo == 3)
return typeid(A3);
420 if (argNo == 4)
return typeid(A4);
421 return typeid(ReturnType);
424 Object call(
const Object * args)
426 auto &a0 = args[0].
extract<A0>();
427 auto &a1 = args[1].extract<A1>();
428 auto &a2 = args[2].extract<A2>();
429 auto &a3 = args[3].extract<A3>();
430 auto &a4 = args[4].extract<A4>();
432 decltype(_fcn), std::is_void<ReturnType>::value
433 >::call(_fcn, a0, a1, a2, a3, a4);
437 template <
typename FcnType,
bool Condition>
struct CallHelper;
438 template <
typename FcnType>
struct CallHelper<FcnType, false>
440 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4)
445 template <
typename FcnType>
struct CallHelper<FcnType, true>
447 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4)
449 fcn(a0, a1, a2, a3, a4);
return Object();
453 std::function<ReturnType(A0, A1, A2, A3, A4)> _fcn;
456 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
457 ClassType CallableFactoryWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4)
459 return ClassType(a0, a1, a2, a3, a4);
462 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
463 ClassType *CallableFactoryNewWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4)
465 return new ClassType(a0, a1, a2, a3, a4);
468 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
469 std::shared_ptr<ClassType> CallableFactorySharedWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4)
471 return std::shared_ptr<ClassType>(
new ClassType(a0, a1, a2, a3, a4));
476 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
477 struct CallableFunctionContainer6 : Detail::CallableContainer
479 template <
typename FcnType>
480 CallableFunctionContainer6(
const FcnType &fcn):
481 _fcn(std::bind(fcn, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6))
486 size_t getNumArgs(
void)
const
491 const std::type_info &type(
const int argNo)
493 if (argNo == 0)
return typeid(A0);
494 if (argNo == 1)
return typeid(A1);
495 if (argNo == 2)
return typeid(A2);
496 if (argNo == 3)
return typeid(A3);
497 if (argNo == 4)
return typeid(A4);
498 if (argNo == 5)
return typeid(A5);
499 return typeid(ReturnType);
502 Object call(
const Object * args)
504 auto &a0 = args[0].
extract<A0>();
505 auto &a1 = args[1].extract<A1>();
506 auto &a2 = args[2].extract<A2>();
507 auto &a3 = args[3].extract<A3>();
508 auto &a4 = args[4].extract<A4>();
509 auto &a5 = args[5].extract<A5>();
511 decltype(_fcn), std::is_void<ReturnType>::value
512 >::call(_fcn, a0, a1, a2, a3, a4, a5);
516 template <
typename FcnType,
bool Condition>
struct CallHelper;
517 template <
typename FcnType>
struct CallHelper<FcnType, false>
519 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5)
524 template <
typename FcnType>
struct CallHelper<FcnType, true>
526 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5)
528 fcn(a0, a1, a2, a3, a4, a5);
return Object();
532 std::function<ReturnType(A0, A1, A2, A3, A4, A5)> _fcn;
535 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
536 ClassType CallableFactoryWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5)
538 return ClassType(a0, a1, a2, a3, a4, a5);
541 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
542 ClassType *CallableFactoryNewWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5)
544 return new ClassType(a0, a1, a2, a3, a4, a5);
547 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
548 std::shared_ptr<ClassType> CallableFactorySharedWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5)
550 return std::shared_ptr<ClassType>(
new ClassType(a0, a1, a2, a3, a4, a5));
555 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
556 struct CallableFunctionContainer7 : Detail::CallableContainer
558 template <
typename FcnType>
559 CallableFunctionContainer7(
const FcnType &fcn):
560 _fcn(std::bind(fcn, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7))
565 size_t getNumArgs(
void)
const
570 const std::type_info &type(
const int argNo)
572 if (argNo == 0)
return typeid(A0);
573 if (argNo == 1)
return typeid(A1);
574 if (argNo == 2)
return typeid(A2);
575 if (argNo == 3)
return typeid(A3);
576 if (argNo == 4)
return typeid(A4);
577 if (argNo == 5)
return typeid(A5);
578 if (argNo == 6)
return typeid(A6);
579 return typeid(ReturnType);
582 Object call(
const Object * args)
584 auto &a0 = args[0].
extract<A0>();
585 auto &a1 = args[1].extract<A1>();
586 auto &a2 = args[2].extract<A2>();
587 auto &a3 = args[3].extract<A3>();
588 auto &a4 = args[4].extract<A4>();
589 auto &a5 = args[5].extract<A5>();
590 auto &a6 = args[6].extract<A6>();
592 decltype(_fcn), std::is_void<ReturnType>::value
593 >::call(_fcn, a0, a1, a2, a3, a4, a5, a6);
597 template <
typename FcnType,
bool Condition>
struct CallHelper;
598 template <
typename FcnType>
struct CallHelper<FcnType, false>
600 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6)
605 template <
typename FcnType>
struct CallHelper<FcnType, true>
607 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6)
609 fcn(a0, a1, a2, a3, a4, a5, a6);
return Object();
613 std::function<ReturnType(A0, A1, A2, A3, A4, A5, A6)> _fcn;
616 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
617 ClassType CallableFactoryWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6)
619 return ClassType(a0, a1, a2, a3, a4, a5, a6);
622 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
623 ClassType *CallableFactoryNewWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6)
625 return new ClassType(a0, a1, a2, a3, a4, a5, a6);
628 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
629 std::shared_ptr<ClassType> CallableFactorySharedWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6)
631 return std::shared_ptr<ClassType>(
new ClassType(a0, a1, a2, a3, a4, a5, a6));
636 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
637 struct CallableFunctionContainer8 : Detail::CallableContainer
639 template <
typename FcnType>
640 CallableFunctionContainer8(
const FcnType &fcn):
641 _fcn(std::bind(fcn, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7, std::placeholders::_8))
646 size_t getNumArgs(
void)
const
651 const std::type_info &type(
const int argNo)
653 if (argNo == 0)
return typeid(A0);
654 if (argNo == 1)
return typeid(A1);
655 if (argNo == 2)
return typeid(A2);
656 if (argNo == 3)
return typeid(A3);
657 if (argNo == 4)
return typeid(A4);
658 if (argNo == 5)
return typeid(A5);
659 if (argNo == 6)
return typeid(A6);
660 if (argNo == 7)
return typeid(A7);
661 return typeid(ReturnType);
664 Object call(
const Object * args)
666 auto &a0 = args[0].
extract<A0>();
667 auto &a1 = args[1].extract<A1>();
668 auto &a2 = args[2].extract<A2>();
669 auto &a3 = args[3].extract<A3>();
670 auto &a4 = args[4].extract<A4>();
671 auto &a5 = args[5].extract<A5>();
672 auto &a6 = args[6].extract<A6>();
673 auto &a7 = args[7].extract<A7>();
675 decltype(_fcn), std::is_void<ReturnType>::value
676 >::call(_fcn, a0, a1, a2, a3, a4, a5, a6, a7);
680 template <
typename FcnType,
bool Condition>
struct CallHelper;
681 template <
typename FcnType>
struct CallHelper<FcnType, false>
683 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7)
685 return Object::make(fcn(a0, a1, a2, a3, a4, a5, a6, a7));
688 template <
typename FcnType>
struct CallHelper<FcnType, true>
690 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7)
692 fcn(a0, a1, a2, a3, a4, a5, a6, a7);
return Object();
696 std::function<ReturnType(A0, A1, A2, A3, A4, A5, A6, A7)> _fcn;
699 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
700 ClassType CallableFactoryWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7)
702 return ClassType(a0, a1, a2, a3, a4, a5, a6, a7);
705 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
706 ClassType *CallableFactoryNewWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7)
708 return new ClassType(a0, a1, a2, a3, a4, a5, a6, a7);
711 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
712 std::shared_ptr<ClassType> CallableFactorySharedWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7)
714 return std::shared_ptr<ClassType>(
new ClassType(a0, a1, a2, a3, a4, a5, a6, a7));
719 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
720 struct CallableFunctionContainer9 : Detail::CallableContainer
722 template <
typename FcnType>
723 CallableFunctionContainer9(
const FcnType &fcn):
724 _fcn(std::bind(fcn, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7, std::placeholders::_8, std::placeholders::_9))
729 size_t getNumArgs(
void)
const
734 const std::type_info &type(
const int argNo)
736 if (argNo == 0)
return typeid(A0);
737 if (argNo == 1)
return typeid(A1);
738 if (argNo == 2)
return typeid(A2);
739 if (argNo == 3)
return typeid(A3);
740 if (argNo == 4)
return typeid(A4);
741 if (argNo == 5)
return typeid(A5);
742 if (argNo == 6)
return typeid(A6);
743 if (argNo == 7)
return typeid(A7);
744 if (argNo == 8)
return typeid(A8);
745 return typeid(ReturnType);
748 Object call(
const Object * args)
750 auto &a0 = args[0].
extract<A0>();
751 auto &a1 = args[1].extract<A1>();
752 auto &a2 = args[2].extract<A2>();
753 auto &a3 = args[3].extract<A3>();
754 auto &a4 = args[4].extract<A4>();
755 auto &a5 = args[5].extract<A5>();
756 auto &a6 = args[6].extract<A6>();
757 auto &a7 = args[7].extract<A7>();
758 auto &a8 = args[8].extract<A8>();
760 decltype(_fcn), std::is_void<ReturnType>::value
761 >::call(_fcn, a0, a1, a2, a3, a4, a5, a6, a7, a8);
765 template <
typename FcnType,
bool Condition>
struct CallHelper;
766 template <
typename FcnType>
struct CallHelper<FcnType, false>
768 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7,
const A8 &a8)
770 return Object::make(fcn(a0, a1, a2, a3, a4, a5, a6, a7, a8));
773 template <
typename FcnType>
struct CallHelper<FcnType, true>
775 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7,
const A8 &a8)
777 fcn(a0, a1, a2, a3, a4, a5, a6, a7, a8);
return Object();
781 std::function<ReturnType(A0, A1, A2, A3, A4, A5, A6, A7, A8)> _fcn;
784 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
785 ClassType CallableFactoryWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7,
const A8 &a8)
787 return ClassType(a0, a1, a2, a3, a4, a5, a6, a7, a8);
790 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
791 ClassType *CallableFactoryNewWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7,
const A8 &a8)
793 return new ClassType(a0, a1, a2, a3, a4, a5, a6, a7, a8);
796 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
797 std::shared_ptr<ClassType> CallableFactorySharedWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7,
const A8 &a8)
799 return std::shared_ptr<ClassType>(
new ClassType(a0, a1, a2, a3, a4, a5, a6, a7, a8));
804 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9>
805 struct CallableFunctionContainer10 : Detail::CallableContainer
807 template <
typename FcnType>
808 CallableFunctionContainer10(
const FcnType &fcn):
809 _fcn(std::bind(fcn, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7, std::placeholders::_8, std::placeholders::_9, std::placeholders::_10))
814 size_t getNumArgs(
void)
const
819 const std::type_info &type(
const int argNo)
821 if (argNo == 0)
return typeid(A0);
822 if (argNo == 1)
return typeid(A1);
823 if (argNo == 2)
return typeid(A2);
824 if (argNo == 3)
return typeid(A3);
825 if (argNo == 4)
return typeid(A4);
826 if (argNo == 5)
return typeid(A5);
827 if (argNo == 6)
return typeid(A6);
828 if (argNo == 7)
return typeid(A7);
829 if (argNo == 8)
return typeid(A8);
830 if (argNo == 9)
return typeid(A9);
831 return typeid(ReturnType);
834 Object call(
const Object * args)
836 auto &a0 = args[0].
extract<A0>();
837 auto &a1 = args[1].extract<A1>();
838 auto &a2 = args[2].extract<A2>();
839 auto &a3 = args[3].extract<A3>();
840 auto &a4 = args[4].extract<A4>();
841 auto &a5 = args[5].extract<A5>();
842 auto &a6 = args[6].extract<A6>();
843 auto &a7 = args[7].extract<A7>();
844 auto &a8 = args[8].extract<A8>();
845 auto &a9 = args[9].extract<A9>();
847 decltype(_fcn), std::is_void<ReturnType>::value
848 >::call(_fcn, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
852 template <
typename FcnType,
bool Condition>
struct CallHelper;
853 template <
typename FcnType>
struct CallHelper<FcnType, false>
855 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7,
const A8 &a8,
const A9 &a9)
857 return Object::make(fcn(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9));
860 template <
typename FcnType>
struct CallHelper<FcnType, true>
862 static Object call(
const FcnType &fcn,
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7,
const A8 &a8,
const A9 &a9)
864 fcn(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
return Object();
868 std::function<ReturnType(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9)> _fcn;
871 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9>
872 ClassType CallableFactoryWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7,
const A8 &a8,
const A9 &a9)
874 return ClassType(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
877 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9>
878 ClassType *CallableFactoryNewWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7,
const A8 &a8,
const A9 &a9)
880 return new ClassType(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
883 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9>
884 std::shared_ptr<ClassType> CallableFactorySharedWrapper(
const A0 &a0,
const A1 &a1,
const A2 &a2,
const A3 &a3,
const A4 &a4,
const A5 &a5,
const A6 &a6,
const A7 &a7,
const A8 &a8,
const A9 &a9)
886 return std::shared_ptr<ClassType>(
new ClassType(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9));
894 template <
typename ReturnType,
typename ClassType>
896 _impl(new Detail::CallableFunctionContainer1<ReturnType, ClassType &>(fcn))
901 template <
typename ReturnType,
typename ClassType>
903 _impl(new Detail::CallableFunctionContainer1<ReturnType, const ClassType &>(fcn))
908 template <
typename ReturnType>
910 _impl(new Detail::CallableFunctionContainer0<ReturnType>(fcn))
915 template <
typename ReturnType,
typename ClassType>
921 template <
typename ReturnType,
typename ClassType>
927 template <
typename ReturnType>
933 template <
typename ClassType>
936 return Callable(&Detail::CallableFactoryWrapper<ClassType>);
939 template <
typename ClassType>
942 return Callable(&Detail::CallableFactoryNewWrapper<ClassType>);
945 template <
typename ClassType>
948 return Callable(&Detail::CallableFactorySharedWrapper<ClassType>);
954 template <
typename ReturnType,
typename ClassType,
typename A0>
956 _impl(new Detail::CallableFunctionContainer2<ReturnType, ClassType &, A0>(fcn))
961 template <
typename ReturnType,
typename ClassType,
typename A0>
963 _impl(new Detail::CallableFunctionContainer2<ReturnType, const ClassType &, A0>(fcn))
968 template <
typename ReturnType,
typename A0>
970 _impl(new Detail::CallableFunctionContainer1<ReturnType, A0>(fcn))
975 template <
typename A0,
typename ReturnType,
typename ClassType>
981 template <
typename A0,
typename ReturnType,
typename ClassType>
987 template <
typename A0,
typename ReturnType>
993 template <
typename ClassType,
typename A0>
996 return Callable(&Detail::CallableFactoryWrapper<ClassType, A0>);
999 template <
typename ClassType,
typename A0>
1002 return Callable(&Detail::CallableFactoryNewWrapper<ClassType, A0>);
1005 template <
typename ClassType,
typename A0>
1008 return Callable(&Detail::CallableFactorySharedWrapper<ClassType, A0>);
1014 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1>
1016 _impl(new Detail::CallableFunctionContainer3<ReturnType, ClassType &, A0, A1>(fcn))
1021 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1>
1023 _impl(new Detail::CallableFunctionContainer3<ReturnType, const ClassType &, A0, A1>(fcn))
1028 template <
typename ReturnType,
typename A0,
typename A1>
1030 _impl(new Detail::CallableFunctionContainer2<ReturnType, A0, A1>(fcn))
1035 template <
typename A0,
typename A1,
typename ReturnType,
typename ClassType>
1041 template <
typename A0,
typename A1,
typename ReturnType,
typename ClassType>
1047 template <
typename A0,
typename A1,
typename ReturnType>
1053 template <
typename ClassType,
typename A0,
typename A1>
1056 return Callable(&Detail::CallableFactoryWrapper<ClassType, A0, A1>);
1059 template <
typename ClassType,
typename A0,
typename A1>
1062 return Callable(&Detail::CallableFactoryNewWrapper<ClassType, A0, A1>);
1065 template <
typename ClassType,
typename A0,
typename A1>
1068 return Callable(&Detail::CallableFactorySharedWrapper<ClassType, A0, A1>);
1074 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2>
1076 _impl(new Detail::CallableFunctionContainer4<ReturnType, ClassType &, A0, A1, A2>(fcn))
1081 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2>
1083 _impl(new Detail::CallableFunctionContainer4<ReturnType, const ClassType &, A0, A1, A2>(fcn))
1088 template <
typename ReturnType,
typename A0,
typename A1,
typename A2>
1090 _impl(new Detail::CallableFunctionContainer3<ReturnType, A0, A1, A2>(fcn))
1095 template <
typename A0,
typename A1,
typename A2,
typename ReturnType,
typename ClassType>
1101 template <
typename A0,
typename A1,
typename A2,
typename ReturnType,
typename ClassType>
1107 template <
typename A0,
typename A1,
typename A2,
typename ReturnType>
1113 template <
typename ClassType,
typename A0,
typename A1,
typename A2>
1116 return Callable(&Detail::CallableFactoryWrapper<ClassType, A0, A1, A2>);
1119 template <
typename ClassType,
typename A0,
typename A1,
typename A2>
1122 return Callable(&Detail::CallableFactoryNewWrapper<ClassType, A0, A1, A2>);
1125 template <
typename ClassType,
typename A0,
typename A1,
typename A2>
1128 return Callable(&Detail::CallableFactorySharedWrapper<ClassType, A0, A1, A2>);
1134 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
1136 _impl(new Detail::CallableFunctionContainer5<ReturnType, ClassType &, A0, A1, A2, A3>(fcn))
1141 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
1143 _impl(new Detail::CallableFunctionContainer5<ReturnType, const ClassType &, A0, A1, A2, A3>(fcn))
1148 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3>
1150 _impl(new Detail::CallableFunctionContainer4<ReturnType, A0, A1, A2, A3>(fcn))
1155 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename ReturnType,
typename ClassType>
1161 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename ReturnType,
typename ClassType>
1167 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename ReturnType>
1173 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
1176 return Callable(&Detail::CallableFactoryWrapper<ClassType, A0, A1, A2, A3>);
1179 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
1182 return Callable(&Detail::CallableFactoryNewWrapper<ClassType, A0, A1, A2, A3>);
1185 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3>
1188 return Callable(&Detail::CallableFactorySharedWrapper<ClassType, A0, A1, A2, A3>);
1194 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
1196 _impl(new Detail::CallableFunctionContainer6<ReturnType, ClassType &, A0, A1, A2, A3, A4>(fcn))
1201 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
1203 _impl(new Detail::CallableFunctionContainer6<ReturnType, const ClassType &, A0, A1, A2, A3, A4>(fcn))
1208 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
1210 _impl(new Detail::CallableFunctionContainer5<ReturnType, A0, A1, A2, A3, A4>(fcn))
1215 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename ReturnType,
typename ClassType>
1221 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename ReturnType,
typename ClassType>
1227 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename ReturnType>
1233 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
1236 return Callable(&Detail::CallableFactoryWrapper<ClassType, A0, A1, A2, A3, A4>);
1239 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
1242 return Callable(&Detail::CallableFactoryNewWrapper<ClassType, A0, A1, A2, A3, A4>);
1245 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
1248 return Callable(&Detail::CallableFactorySharedWrapper<ClassType, A0, A1, A2, A3, A4>);
1254 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
1256 _impl(new Detail::CallableFunctionContainer7<ReturnType, ClassType &, A0, A1, A2, A3, A4, A5>(fcn))
1261 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
1263 _impl(new Detail::CallableFunctionContainer7<ReturnType, const ClassType &, A0, A1, A2, A3, A4, A5>(fcn))
1268 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
1270 _impl(new Detail::CallableFunctionContainer6<ReturnType, A0, A1, A2, A3, A4, A5>(fcn))
1275 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename ReturnType,
typename ClassType>
1281 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename ReturnType,
typename ClassType>
1287 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename ReturnType>
1293 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
1296 return Callable(&Detail::CallableFactoryWrapper<ClassType, A0, A1, A2, A3, A4, A5>);
1299 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
1302 return Callable(&Detail::CallableFactoryNewWrapper<ClassType, A0, A1, A2, A3, A4, A5>);
1305 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
1308 return Callable(&Detail::CallableFactorySharedWrapper<ClassType, A0, A1, A2, A3, A4, A5>);
1314 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
1316 _impl(new Detail::CallableFunctionContainer8<ReturnType, ClassType &, A0, A1, A2, A3, A4, A5, A6>(fcn))
1321 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
1323 _impl(new Detail::CallableFunctionContainer8<ReturnType, const ClassType &, A0, A1, A2, A3, A4, A5, A6>(fcn))
1328 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
1330 _impl(new Detail::CallableFunctionContainer7<ReturnType, A0, A1, A2, A3, A4, A5, A6>(fcn))
1335 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename ReturnType,
typename ClassType>
1341 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename ReturnType,
typename ClassType>
1347 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename ReturnType>
1353 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
1356 return Callable(&Detail::CallableFactoryWrapper<ClassType, A0, A1, A2, A3, A4, A5, A6>);
1359 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
1362 return Callable(&Detail::CallableFactoryNewWrapper<ClassType, A0, A1, A2, A3, A4, A5, A6>);
1365 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
1368 return Callable(&Detail::CallableFactorySharedWrapper<ClassType, A0, A1, A2, A3, A4, A5, A6>);
1374 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
1376 _impl(new Detail::CallableFunctionContainer9<ReturnType, ClassType &, A0, A1, A2, A3, A4, A5, A6, A7>(fcn))
1381 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
1382 Callable::Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6, A7)
const):
1383 _impl(new Detail::CallableFunctionContainer9<ReturnType, const ClassType &, A0, A1, A2, A3, A4, A5, A6, A7>(fcn))
1388 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
1390 _impl(new Detail::CallableFunctionContainer8<ReturnType, A0, A1, A2, A3, A4, A5, A6, A7>(fcn))
1395 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename ReturnType,
typename ClassType>
1401 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename ReturnType,
typename ClassType>
1407 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename ReturnType>
1413 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
1416 return Callable(&Detail::CallableFactoryWrapper<ClassType, A0, A1, A2, A3, A4, A5, A6, A7>);
1419 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
1422 return Callable(&Detail::CallableFactoryNewWrapper<ClassType, A0, A1, A2, A3, A4, A5, A6, A7>);
1425 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
1428 return Callable(&Detail::CallableFactorySharedWrapper<ClassType, A0, A1, A2, A3, A4, A5, A6, A7>);
1434 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
1436 _impl(new Detail::CallableFunctionContainer10<ReturnType, ClassType &, A0, A1, A2, A3, A4, A5, A6, A7, A8>(fcn))
1441 template <
typename ReturnType,
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
1442 Callable::Callable(ReturnType(ClassType::*fcn)(A0, A1, A2, A3, A4, A5, A6, A7, A8)
const):
1443 _impl(new Detail::CallableFunctionContainer10<ReturnType, const ClassType &, A0, A1, A2, A3, A4, A5, A6, A7, A8>(fcn))
1448 template <
typename ReturnType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
1450 _impl(new Detail::CallableFunctionContainer9<ReturnType, A0, A1, A2, A3, A4, A5, A6, A7, A8>(fcn))
1455 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename ReturnType,
typename ClassType>
1461 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename ReturnType,
typename ClassType>
1467 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename ReturnType>
1473 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
1476 return Callable(&Detail::CallableFactoryWrapper<ClassType, A0, A1, A2, A3, A4, A5, A6, A7, A8>);
1479 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
1482 return Callable(&Detail::CallableFactoryNewWrapper<ClassType, A0, A1, A2, A3, A4, A5, A6, A7, A8>);
1485 template <
typename ClassType,
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
1488 return Callable(&Detail::CallableFactorySharedWrapper<ClassType, A0, A1, A2, A3, A4, A5, A6, A7, A8>);
#define POTHOS_API
Definition: Config.hpp:41
Callable & bind(ValueType &&val, const size_t argNo)
Definition: CallableImpl.hpp:35
static Callable make(ReturnType(ClassType::*fcn)($expand('A%d', $NARGS)))
Definition: CallableImpl.tmpl.hpp:145
static Object make(ValueType &&value)
Definition: ObjectImpl.hpp:206
Definition: Callable.tmpl.hpp:30
static Callable factoryShared(void)
Definition: CallableImpl.hpp:1006
const ValueType & extract(void) const
Definition: ObjectImpl.hpp:221
static Callable factoryNew(void)
Definition: CallableImpl.hpp:1000
static Callable factory(void)
Definition: CallableImpl.hpp:994