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.tmpl.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:210
 
Definition: Callable.tmpl.hpp:30
 
static Callable factoryShared(void)
Definition: CallableImpl.tmpl.hpp:175
 
const ValueType & extract(void) const 
Definition: ObjectImpl.hpp:225
 
static Callable factoryNew(void)
Definition: CallableImpl.tmpl.hpp:169
 
static Callable factory(void)
Definition: CallableImpl.tmpl.hpp:163