/////////////////////////////////////////// // helper templates for use with stl // providing argument binding for more arities // and proper const support /////////////////////////////////////////// #pragma once #pragma warning(disable:4181) #include /////////////////////////////////////////// // Types /////////////////////////////////////////// // Type classes for arity 0 template class arity0_function { public: typedef R result_type; }; // Template Class to define Object Type template class ObjectType { public: typedef Object object_type; }; // template class for arity0 member function type template class arity0_mf : public ObjectType , public arity0_function { public: typedef R (Object::*pmf0type)(); }; // template class for arity0 member function type template class arity0_const_mf : public ObjectType , public arity0_function { public: typedef R (Object::*pmf0type)() const; }; // Type classes for arity 1 // template class for arity1 member function type template class arity1_mf : public ObjectType , public std::unary_function { public: typedef R (Object::*pmf1type)(A1); }; // template class for arity1 member function type template class arity1_const_mf : public ObjectType , public std::unary_function { public: typedef R (Object::*pmf1type)(A1) const; }; // Type classes for arity 2 // template class for arity2 member function type template class arity2_mf : public ObjectType , public std::binary_function { public: typedef first_argument_type argument_type; typedef R (Object::*pmf2type)(A1, A2); }; // template class for arity2 member function type template class arity2_const_mf : public ObjectType , public std::binary_function { public: typedef first_argument_type argument_type; typedef R (Object::*pmf2type)(A1, A2) const; }; // Type classes for arity 3 template class arity3_function : public std::binary_function { public:typedef first_argument_type argument_type; typedef A3 argument_3_type; }; // template class for arity3 member function type template class arity3_mf : public ObjectType , public arity3_function { public: typedef R (Object::*pmf3type)(A1, A2, A3); }; // template class for arity3 member function type template class arity3_const_mf : public ObjectType , public arity3_function { public: typedef R (Object::*pmf3type)(A1, A2, A3) const; }; // Type classes for arity 4 template class arity4_function : public arity3_function { public: typedef A4 argument_4_type; }; // template class for arity4 member function type template class arity4_mf : public ObjectType , public arity4_function { public: typedef R (Object::*pmf4type)(A1, A2, A3, A4); }; // template class for arity4 member function type template class arity4_const_mf : public ObjectType , public arity4_function { public: typedef R (Object::*pmf4type)(A1, A2, A3, A4) const; }; // Type classes for arity 5 template class arity5_function : public arity4_function { public: typedef A5 argument_5_type; }; // template class for arity5 member function type template class arity5_mf : public ObjectType , public arity5_function { public: typedef R (Object::*pmf5type)(A1, A2, A3, A4, A5); }; // template class for arity5 member function type template class arity5_const_mf : public ObjectType , public arity5_function { public: typedef R (Object::*pmf5type)(A1, A2, A3, A4, A5) const; }; // Type classes for arity 6 template class arity6_function : public arity5_function { public: typedef A6 argument_6_type; }; // template class for arity6 member function type template class arity6_mf : public ObjectType , public arity6_function { public: typedef R (Object::*pmf6type)(A1, A2, A3, A4, A5, A6); }; // template class for arity6 member function type template class arity6_const_mf : public ObjectType , public arity6_function { public: typedef R (Object::*pmf6type)(A1, A2, A3, A4, A5, A6) const; }; // Type classes for arity 7 template class arity7_function : public arity6_function { public: typedef A7 argument_7_type; }; // template class for arity7 member function type template class arity7_mf : public ObjectType , public arity7_function { public: typedef R (Object::*pmf7type)(A1, A2, A3, A4, A5, A6, A7); }; // template class for arity7 member function type template class arity7_const_mf : public ObjectType , public arity7_function { public: typedef R (Object::*pmf7type)(A1, A2, A3, A4, A5, A6, A7) const; }; // Type classes for arity 8 template class arity8_function : public arity7_function { public: typedef A8 argument_8_type; }; // template class for arity8 member function type template class arity8_mf : public ObjectType , public arity8_function { public: typedef R (Object::*pmf8type)(A1, A2, A3, A4, A5, A6, A7, A8); }; // template class for arity8 member function type template class arity8_const_mf : public ObjectType , public arity8_function { public: typedef R (Object::*pmf8type)(A1, A2, A3, A4, A5, A6, A7, A8) const; }; // Type classes for arity 9 template class arity9_function : public arity8_function { public: typedef A9 argument_9_type; }; // template class for arity9 member function type template class arity9_mf : public ObjectType , public arity9_function { public: typedef R (Object::*pmf9type)(A1, A2, A3, A4, A5, A6, A7, A8, A9); }; // template class for arity9 member function type template class arity9_const_mf : public ObjectType , public arity9_function { public: typedef R (Object::*pmf9type)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const; }; // Type classes for arity 10 template class arity10_function : public arity9_function { public: typedef A10 argument_10_type; }; // template class for arity10 member function type template class arity10_mf : public ObjectType , public arity10_function { public: typedef R (Object::*pmf10type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); }; // template class for arity10 member function type template class arity10_const_mf : public ObjectType , public arity10_function { public: typedef R (Object::*pmf10type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) const; }; // Type classes for arity 11 template class arity11_function : public arity10_function { public: typedef A11 argument_11_type; }; // template class for arity11 member function type template class arity11_mf : public ObjectType , public arity11_function { public: typedef R (Object::*pmf11type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11); }; // template class for arity11 member function type template class arity11_const_mf : public ObjectType , public arity11_function { public: typedef R (Object::*pmf11type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) const; }; // Type classes for arity 12 template class arity12_function : public arity11_function { public: typedef A12 argument_12_type; }; // template class for arity12 member function type template class arity12_mf : public ObjectType , public arity12_function { public: typedef R (Object::*pmf12type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12); }; // template class for arity12 member function type template class arity12_const_mf : public ObjectType , public arity12_function { public: typedef R (Object::*pmf12type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) const; }; // Type classes for arity 13 template class arity13_function : public arity12_function { public: typedef A13 argument_13_type; }; // template class for arity13 member function type template class arity13_mf : public ObjectType , public arity13_function { public: typedef R (Object::*pmf13type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13); }; // template class for arity13 member function type template class arity13_const_mf : public ObjectType , public arity13_function { public: typedef R (Object::*pmf13type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) const; }; // Type classes for arity 14 template class arity14_function : public arity13_function { public: typedef A14 argument_14_type; }; // template class for arity14 member function type template class arity14_mf : public ObjectType , public arity14_function { public: typedef R (Object::*pmf14type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14); }; // template class for arity14 member function type template class arity14_const_mf : public ObjectType , public arity14_function { public: typedef R (Object::*pmf14type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) const; }; // Type classes for arity 15 template class arity15_function : public arity14_function { public: typedef A15 argument_15_type; }; // template class for arity15 member function type template class arity15_mf : public ObjectType , public arity15_function { public: typedef R (Object::*pmf15type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15); }; // template class for arity15 member function type template class arity15_const_mf : public ObjectType , public arity15_function { public: typedef R (Object::*pmf15type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) const; }; // template class for arity0 member function type template class std_arity0_mf : public ObjectType , public arity0_function { public: typedef R ( __stdcall Object::*pmf0type)(); }; // template class for arity0 member function type template class std_arity0_const_mf : public ObjectType , public arity0_function { public: typedef R ( __stdcall Object::*pmf0type)() const; }; // template class for arity1 member function type template class std_arity1_mf : public ObjectType , public std::unary_function { public: typedef R ( __stdcall Object::*pmf1type)(A1); }; // template class for arity1 member function type template class std_arity1_const_mf : public ObjectType , public std::unary_function { public: typedef R ( __stdcall Object::*pmf1type)(A1) const; }; // template class for arity2 member function type template class std_arity2_mf : public ObjectType , public std::binary_function { public: typedef first_argument_type argument_type; typedef R ( __stdcall Object::*pmf2type)(A1, A2); }; // template class for arity2 member function type template class std_arity2_const_mf : public ObjectType , public std::binary_function { public: typedef first_argument_type argument_type; typedef R ( __stdcall Object::*pmf2type)(A1, A2) const; }; // template class for arity3 member function type template class std_arity3_mf : public ObjectType , public arity3_function { public: typedef R ( __stdcall Object::*pmf3type)(A1, A2, A3); }; // template class for arity3 member function type template class std_arity3_const_mf : public ObjectType , public arity3_function { public: typedef R ( __stdcall Object::*pmf3type)(A1, A2, A3) const; }; // template class for arity4 member function type template class std_arity4_mf : public ObjectType , public arity4_function { public: typedef R ( __stdcall Object::*pmf4type)(A1, A2, A3, A4); }; // template class for arity4 member function type template class std_arity4_const_mf : public ObjectType , public arity4_function { public: typedef R ( __stdcall Object::*pmf4type)(A1, A2, A3, A4) const; }; // template class for arity5 member function type template class std_arity5_mf : public ObjectType , public arity5_function { public: typedef R ( __stdcall Object::*pmf5type)(A1, A2, A3, A4, A5); }; // template class for arity5 member function type template class std_arity5_const_mf : public ObjectType , public arity5_function { public: typedef R ( __stdcall Object::*pmf5type)(A1, A2, A3, A4, A5) const; }; // template class for arity6 member function type template class std_arity6_mf : public ObjectType , public arity6_function { public: typedef R ( __stdcall Object::*pmf6type)(A1, A2, A3, A4, A5, A6); }; // template class for arity6 member function type template class std_arity6_const_mf : public ObjectType , public arity6_function { public: typedef R ( __stdcall Object::*pmf6type)(A1, A2, A3, A4, A5, A6) const; }; // template class for arity7 member function type template class std_arity7_mf : public ObjectType , public arity7_function { public: typedef R ( __stdcall Object::*pmf7type)(A1, A2, A3, A4, A5, A6, A7); }; // template class for arity7 member function type template class std_arity7_const_mf : public ObjectType , public arity7_function { public: typedef R ( __stdcall Object::*pmf7type)(A1, A2, A3, A4, A5, A6, A7) const; }; // template class for arity8 member function type template class std_arity8_mf : public ObjectType , public arity8_function { public: typedef R ( __stdcall Object::*pmf8type)(A1, A2, A3, A4, A5, A6, A7, A8); }; // template class for arity8 member function type template class std_arity8_const_mf : public ObjectType , public arity8_function { public: typedef R ( __stdcall Object::*pmf8type)(A1, A2, A3, A4, A5, A6, A7, A8) const; }; // template class for arity9 member function type template class std_arity9_mf : public ObjectType , public arity9_function { public: typedef R ( __stdcall Object::*pmf9type)(A1, A2, A3, A4, A5, A6, A7, A8, A9); }; // template class for arity9 member function type template class std_arity9_const_mf : public ObjectType , public arity9_function { public: typedef R ( __stdcall Object::*pmf9type)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const; }; // template class for arity10 member function type template class std_arity10_mf : public ObjectType , public arity10_function { public: typedef R ( __stdcall Object::*pmf10type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); }; // template class for arity10 member function type template class std_arity10_const_mf : public ObjectType , public arity10_function { public: typedef R ( __stdcall Object::*pmf10type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) const; }; // template class for arity11 member function type template class std_arity11_mf : public ObjectType , public arity11_function { public: typedef R ( __stdcall Object::*pmf11type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11); }; // template class for arity11 member function type template class std_arity11_const_mf : public ObjectType , public arity11_function { public: typedef R ( __stdcall Object::*pmf11type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) const; }; // template class for arity12 member function type template class std_arity12_mf : public ObjectType , public arity12_function { public: typedef R ( __stdcall Object::*pmf12type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12); }; // template class for arity12 member function type template class std_arity12_const_mf : public ObjectType , public arity12_function { public: typedef R ( __stdcall Object::*pmf12type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) const; }; // template class for arity13 member function type template class std_arity13_mf : public ObjectType , public arity13_function { public: typedef R ( __stdcall Object::*pmf13type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13); }; // template class for arity13 member function type template class std_arity13_const_mf : public ObjectType , public arity13_function { public: typedef R ( __stdcall Object::*pmf13type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) const; }; // template class for arity14 member function type template class std_arity14_mf : public ObjectType , public arity14_function { public: typedef R ( __stdcall Object::*pmf14type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14); }; // template class for arity14 member function type template class std_arity14_const_mf : public ObjectType , public arity14_function { public: typedef R ( __stdcall Object::*pmf14type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) const; }; // template class for arity15 member function type template class std_arity15_mf : public ObjectType , public arity15_function { public: typedef R ( __stdcall Object::*pmf15type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15); }; // template class for arity15 member function type template class std_arity15_const_mf : public ObjectType , public arity15_function { public: typedef R ( __stdcall Object::*pmf15type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) const; }; /////////////////////////////////////////// // Storage /////////////////////////////////////////// // Template Class for object storage template class store_object { public: explicit inline store_object(Object objinit) : objval(objinit) {} inline store_object(const store_object &init) : objval(init.objval) {} protected: Object objval; }; // storage allocation classes for arity 0 // Template Class for arity 0 function ptr storage template class arity0fp: public arity0_function { public: typedef R (*const pf0type) (); explicit inline arity0fp(pf0type pfi) : pf0(pfi) {} inline arity0fp(const arity0fp& fi) : pf0(fi.pf0) {} inline R operator()() const { return pf0(); } pf0type pf0; }; // Template Function for arity 0 function ptr storage template inline arity0fp arity0_pointer(R (*const pfi)()) { return arity0fp(pfi); }; // Template Class for arity 0 pmf storage template class arity0pmf: public arity0_mf { public: typedef typename arity0_mf::object_type object_type; explicit inline arity0pmf(pmf0type pmfi) : pmf0(pmfi) {} inline arity0pmf(const arity0pmf& pmfi) : pmf0(pmfi.pmf0) {} inline virtual R operator()(Object& o ) const { return (o.*pmf0)(); } pmf0type pmf0; }; template class arity0pmf_ptr: public arity0pmf, public std::unary_function { public: explicit inline arity0pmf_ptr(pmf0type pmfi) : arity0pmf(pmfi) {} inline arity0pmf_ptr(const arity0pmf_ptr& pmfi) : arity0pmf(pmfi) {} inline virtual R operator()(Object& o ) const { return (o.*pmf0)(); } inline virtual R operator()(Object* o ) const { return (o->*pmf0)(); } }; // Template Function for arity 0 pmf storage template inline arity0pmf_ptr arity0_member_ptr(R (Object::*const pmfi)()) { return arity0pmf_ptr(pmfi); }; // Template Function for arity 0 pmf storage template inline arity0pmf arity0_member(R (Object::*const pmfi)()) { return arity0pmf(pmfi); }; // Template Class for arity 0 const pmf storage template class arity0pmf_const: public arity0_const_mf { public: typedef typename arity0_const_mf::object_type object_type; explicit inline arity0pmf_const(pmf0type pmfi) : pmf0(pmfi) {} inline arity0pmf_const(const arity0pmf_const& pmfi) : pmf0(pmfi.pmf0) {} inline virtual R operator()(const Object& o ) const { return (o.*pmf0)(); } pmf0type pmf0; }; // Template Function for arity 0 const pmf storage template inline arity0pmf_const arity0_const_member(R (Object::*const pmfi)() const) { return arity0pmf_const(pmfi); }; // Template Class for arity 0 obj&pmf ref storage template class arity0opmf: public arity0pmf, public store_object { public: explicit inline arity0opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), arity0pmf(f) {} explicit inline arity0opmf(typename Function::object_type& oi, pmf0type pmfi) : store_object(oi), arity0pmf(pmfi) {} inline arity0opmf(const arity0opmf& bndri) : store_object(bndri), arity0pmf(bndri) {} inline typename Function::result_type operator()() const { return (objval.*pmf0)(); } pmf0type pmf0; }; // Template Function for arity 0 obj&pmf ref storage template inline arity0opmf arity0_member_obj(Object& oi, const Function &f) { return arity0opmf(Function::object_type(oi), Function::pmf0type(f.pmf0)); }; // Template Class for arity 0 const obj&pmf ref storage template class arity0opmf_const: public arity0pmf_const, public store_object { public: explicit inline arity0opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), arity0pmf_const(f) {} explicit inline arity0opmf_const(typename Function::object_type& oi, pmf0type pmfi) : store_object(oi), arity0pmf_const(pmfi) {} inline arity0opmf_const(const arity0opmf_const& bndri) : store_object(bndri), arity0pmf_const(bndri) {} inline typename Function::result_type operator()() const { return (objval.*pmf0)(); } pmf0type pmf0; }; // Template Function for arity 0 const obj&pmf ref storage template inline arity0opmf_const arity0_const_member_obj(Object& oi, const Function &f) { return arity0opmf_const(Function::object_type(oi), Function::pmf0type(f.pmf0)); }; // storage allocation classes for arity 1 // Template Class for arity 1 function ptr storage template class arity1fp: public std::unary_function, public arity0fp { public: typedef typename std::unary_function::result_type result_type; typedef R (*const pf1type) (A1); explicit inline arity1fp(pf1type pfi) : arity0fp(reinterpret_cast(pfi)) {} inline arity1fp(const arity1fp& fi) : arity0fp(fi) {} inline R operator()(A1 a1) const { pf1type pf = reinterpret_cast(pf0); return pf(a1); } }; // Template Function for arity 1 function ptr storage template inline arity1fp arity1_pointer(R (*const pfi)(A1)) { return arity1fp(pfi); }; // Template Class for arity 1 pmf storage template class arity1pmf: public arity1_mf, public arity0pmf { public: typedef typename std::unary_function::result_type result_type; typedef typename arity1_mf::object_type object_type; explicit inline arity1pmf(pmf1type pmfi) : arity0pmf(reinterpret_cast(pmfi)) {} inline arity1pmf(const arity1pmf& pmfi) : arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1) const { pmf1type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1); } }; // Template Function for arity 1 pmf storage template inline arity1pmf arity1_member(R (Object::*const pmfi)(A1)) { return arity1pmf(pmfi); }; // Template Class for arity 1 const pmf storage template class arity1pmf_const: public arity1_const_mf, public arity0pmf_const { public: typedef typename std::unary_function::result_type result_type; typedef typename arity1_const_mf::object_type object_type; explicit inline arity1pmf_const(pmf1type pmfi) : arity0pmf_const(reinterpret_cast(pmfi)) {} inline arity1pmf_const(const arity1pmf_const& pmfi) : arity0pmf_const(pmfi) {} inline virtual R operator()(const Object& o, A1 a1) const { pmf1type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1); } }; // Template Function for arity 1 const pmf storage template inline arity1pmf_const arity1_const_member(R (Object::*const pmfi)(A1) const) { return arity1pmf_const(pmfi); }; // Template Class for arity 1 obj&pmf ref storage template class arity1opmf: public arity1pmf, public store_object { public: explicit inline arity1opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), arity1pmf(f) {} explicit inline arity1opmf(typename Function::object_type& oi, pmf1type pmfi) : store_object(oi), arity1pmf(pmfi) {} inline arity1opmf(const arity1opmf& bndri) : store_object(bndri), arity1pmf(bndri) {} inline typename Function::result_type operator()(typename Function::argument_type a1) const { pmf1type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1); } }; // Template Function for arity 1 obj&pmf ref storage template inline arity1opmf arity1_member_obj(Object& oi, const Function &f) { return arity1opmf(Function::object_type(oi), Function::pmf1type(f.pmf0)); }; // Template Class for arity 1 const obj&pmf ref storage template class arity1opmf_const: public arity1pmf_const, public store_object { public: explicit inline arity1opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), arity1pmf_const(f) {} explicit inline arity1opmf_const(typename Function::object_type& oi, pmf1type pmfi) : store_object(oi), arity1pmf_const(pmfi) {} inline arity1opmf_const(const arity1opmf_const& bndri) : store_object(bndri), arity1pmf_const(bndri) {} inline typename Function::result_type operator()(typename Function::argument_type a1) const { pmf1type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1); } }; // Template Function for arity 1 const obj&pmf ref storage template inline arity1opmf_const arity1_const_member_obj(Object& oi, const Function &f) { return arity1opmf_const(Function::object_type(oi), Function::pmf1type(f.pmf0)); }; // storage allocation classes for arity 2 // Template Class for arity 2 function ptr storage template class arity2fp: public std::binary_function, public arity0fp { public: typedef typename std::binary_function::result_type result_type; typedef typename std::binary_function::first_argument_type first_argument_type; typedef R (*const pf2type) (A1, A2); explicit inline arity2fp(pf2type pfi) : arity0fp(reinterpret_cast(pfi)) {} inline arity2fp(const arity2fp& fi) : arity0fp(fi) {} inline R operator()(A1 a1, A2 a2) const { pf2type pf = reinterpret_cast(pf0); return pf(a1, a2); } }; // Template Function for arity 2 function ptr storage template inline arity2fp arity2_pointer(R (*const pfi)(A1, A2)) { return arity2fp(pfi); }; // Template Class for arity 2 pmf storage template class arity2pmf: public arity2_mf, public arity0pmf { public: typedef typename std::binary_function::result_type result_type; typedef typename std::binary_function::first_argument_type first_argument_type; typedef typename arity2_mf::object_type object_type; explicit inline arity2pmf(pmf2type pmfi) : arity0pmf(reinterpret_cast(pmfi)) {} inline arity2pmf(const arity2pmf& pmfi) : arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1, A2 a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2); } }; // Template Function for arity 2 pmf storage template inline arity2pmf arity2_member(R (Object::*const pmfi)(A1, A2)) { return arity2pmf(pmfi); }; // Template Class for arity 2 const pmf storage template class arity2pmf_const: public arity2_const_mf, public arity0pmf_const { public: typedef typename std::binary_function::result_type result_type; typedef typename std::binary_function::first_argument_type first_argument_type; typedef typename arity2_const_mf::object_type object_type; explicit inline arity2pmf_const(pmf2type pmfi) : arity0pmf_const(reinterpret_cast(pmfi)) {} inline arity2pmf_const(const arity2pmf_const& pmfi) : arity0pmf_const(pmfi) {} inline virtual R operator()(const Object& o, A1 a1, A2 a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2); } }; // Template Function for arity 2 const pmf storage template inline arity2pmf_const arity2_const_member(R (Object::*const pmfi)(A1, A2) const) { return arity2pmf_const(pmfi); }; // Template Class for arity 2 obj&pmf ref storage template class arity2opmf: public arity2pmf, public store_object { public: explicit inline arity2opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), arity2pmf(f) {} explicit inline arity2opmf(typename Function::object_type& oi, pmf2type pmfi) : store_object(oi), arity2pmf(pmfi) {} inline arity2opmf(const arity2opmf& bndri) : store_object(bndri), arity2pmf(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2); } }; // Template Function for arity 2 obj&pmf ref storage template inline arity2opmf arity2_member_obj(Object& oi, const Function &f) { return arity2opmf(Function::object_type(oi), Function::pmf2type(f.pmf0)); }; // Template Class for arity 2 const obj&pmf ref storage template class arity2opmf_const: public arity2pmf_const, public store_object { public: explicit inline arity2opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), arity2pmf_const(f) {} explicit inline arity2opmf_const(typename Function::object_type& oi, pmf2type pmfi) : store_object(oi), arity2pmf_const(pmfi) {} inline arity2opmf_const(const arity2opmf_const& bndri) : store_object(bndri), arity2pmf_const(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2); } }; // Template Function for arity 2 const obj&pmf ref storage template inline arity2opmf_const arity2_const_member_obj(Object& oi, const Function &f) { return arity2opmf_const(Function::object_type(oi), Function::pmf2type(f.pmf0)); }; // storage allocation classes for arity 3 // Template Class for arity 3 function ptr storage template class arity3fp: public arity3_function, public arity0fp { public: typedef typename arity3_function::result_type result_type; typedef typename arity3_function::first_argument_type first_argument_type; typedef typename arity3_function::second_argument_type second_argument_type; typedef R (*const pf3type) (A1, A2, A3); explicit inline arity3fp(pf3type pfi) : arity0fp(reinterpret_cast(pfi)) {} inline arity3fp(const arity3fp& fi) : arity0fp(fi) {} inline R operator()(A1 a1, A2 a2, A3 a3) const { pf3type pf = reinterpret_cast(pf0); return pf(a1, a2, a3); } }; // Template Function for arity 3 function ptr storage template inline arity3fp arity3_pointer(R (*const pfi)(A1, A2, A3)) { return arity3fp(pfi); }; // Template Class for arity 3 pmf storage template class arity3pmf: public arity3_mf, public arity0pmf { public: typedef typename arity3_function::result_type result_type; typedef typename arity3_function::first_argument_type first_argument_type; typedef typename arity3_function::second_argument_type second_argument_type; typedef typename arity3_mf::object_type object_type; explicit inline arity3pmf(pmf3type pmfi) : arity0pmf(reinterpret_cast(pmfi)) {} inline arity3pmf(const arity3pmf& pmfi) : arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1, A2 a2, A3 a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3); } }; // Template Function for arity 3 pmf storage template inline arity3pmf arity3_member(R (Object::*const pmfi)(A1, A2, A3)) { return arity3pmf(pmfi); }; // Template Class for arity 3 const pmf storage template class arity3pmf_const: public arity3_const_mf, public arity0pmf_const { public: typedef typename arity3_function::result_type result_type; typedef typename arity3_function::first_argument_type first_argument_type; typedef typename arity3_function::second_argument_type second_argument_type; typedef typename arity3_const_mf::object_type object_type; explicit inline arity3pmf_const(pmf3type pmfi) : arity0pmf_const(reinterpret_cast(pmfi)) {} inline arity3pmf_const(const arity3pmf_const& pmfi) : arity0pmf_const(pmfi) {} inline virtual R operator()(const Object& o, A1 a1, A2 a2, A3 a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3); } }; // Template Function for arity 3 const pmf storage template inline arity3pmf_const arity3_const_member(R (Object::*const pmfi)(A1, A2, A3) const) { return arity3pmf_const(pmfi); }; // Template Class for arity 3 obj&pmf ref storage template class arity3opmf: public arity3pmf, public store_object { public: explicit inline arity3opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), arity3pmf(f) {} explicit inline arity3opmf(typename Function::object_type& oi, pmf3type pmfi) : store_object(oi), arity3pmf(pmfi) {} inline arity3opmf(const arity3opmf& bndri) : store_object(bndri), arity3pmf(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3); } }; // Template Function for arity 3 obj&pmf ref storage template inline arity3opmf arity3_member_obj(Object& oi, const Function &f) { return arity3opmf(Function::object_type(oi), Function::pmf3type(f.pmf0)); }; // Template Class for arity 3 const obj&pmf ref storage template class arity3opmf_const: public arity3pmf_const, public store_object { public: explicit inline arity3opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), arity3pmf_const(f) {} explicit inline arity3opmf_const(typename Function::object_type& oi, pmf3type pmfi) : store_object(oi), arity3pmf_const(pmfi) {} inline arity3opmf_const(const arity3opmf_const& bndri) : store_object(bndri), arity3pmf_const(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3); } }; // Template Function for arity 3 const obj&pmf ref storage template inline arity3opmf_const arity3_const_member_obj(Object& oi, const Function &f) { return arity3opmf_const(Function::object_type(oi), Function::pmf3type(f.pmf0)); }; // storage allocation classes for arity 4 // Template Class for arity 4 pmf storage template class arity4pmf: public arity4_mf, public arity0pmf { public: typedef typename arity4_function::result_type result_type; typedef typename arity4_function::first_argument_type first_argument_type; typedef typename arity4_function::second_argument_type second_argument_type; typedef typename arity4_mf::object_type object_type; explicit inline arity4pmf(pmf4type pmfi) : arity0pmf(reinterpret_cast(pmfi)) {} inline arity4pmf(const arity4pmf& pmfi) : arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1, A2 a2, A3 a3, A4 a4) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4); } }; // Template Function for arity 4 pmf storage template inline arity4pmf arity4_member(R (Object::*const pmfi)(A1, A2, A3, A4)) { return arity4pmf(pmfi); }; // Template Class for arity 4 const pmf storage template class arity4pmf_const: public arity4_const_mf, public arity0pmf_const { public: typedef typename arity4_function::result_type result_type; typedef typename arity4_function::first_argument_type first_argument_type; typedef typename arity4_function::second_argument_type second_argument_type; typedef typename arity4_const_mf::object_type object_type; explicit inline arity4pmf_const(pmf4type pmfi) : arity0pmf_const(reinterpret_cast(pmfi)) {} inline arity4pmf_const(const arity4pmf_const& pmfi) : arity0pmf_const(pmfi) {} inline virtual R operator()(const Object& o, A1 a1, A2 a2, A3 a3, A4 a4) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4); } }; // Template Function for arity 4 const pmf storage template inline arity4pmf_const arity4_const_member(R (Object::*const pmfi)(A1, A2, A3, A4) const) { return arity4pmf_const(pmfi); }; // Template Class for arity 4 obj&pmf ref storage template class arity4opmf: public arity4pmf, public store_object { public: explicit inline arity4opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), arity4pmf(f) {} explicit inline arity4opmf(typename Function::object_type& oi, pmf4type pmfi) : store_object(oi), arity4pmf(pmfi) {} inline arity4opmf(const arity4opmf& bndri) : store_object(bndri), arity4pmf(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4); } }; // Template Function for arity 4 obj&pmf ref storage template inline arity4opmf arity4_member_obj(Object& oi, const Function &f) { return arity4opmf(Function::object_type(oi), Function::pmf4type(f.pmf0)); }; // Template Class for arity 4 const obj&pmf ref storage template class arity4opmf_const: public arity4pmf_const, public store_object { public: explicit inline arity4opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), arity4pmf_const(f) {} explicit inline arity4opmf_const(typename Function::object_type& oi, pmf4type pmfi) : store_object(oi), arity4pmf_const(pmfi) {} inline arity4opmf_const(const arity4opmf_const& bndri) : store_object(bndri), arity4pmf_const(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4); } }; // Template Function for arity 4 const obj&pmf ref storage template inline arity4opmf_const arity4_const_member_obj(Object& oi, const Function &f) { return arity4opmf_const(Function::object_type(oi), Function::pmf4type(f.pmf0)); }; // storage allocation classes for arity 5 // Template Class for arity 5 pmf storage template class arity5pmf: public arity5_mf, public arity0pmf { public: typedef typename arity5_function::result_type result_type; typedef typename arity5_function::first_argument_type first_argument_type; typedef typename arity5_function::second_argument_type second_argument_type; typedef typename arity5_mf::object_type object_type; explicit inline arity5pmf(pmf5type pmfi) : arity0pmf(reinterpret_cast(pmfi)) {} inline arity5pmf(const arity5pmf& pmfi) : arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4, a5); } }; // Template Function for arity 5 pmf storage template inline arity5pmf arity5_member(R (Object::*const pmfi)(A1, A2, A3, A4, A5)) { return arity5pmf(pmfi); }; // Template Class for arity 5 const pmf storage template class arity5pmf_const: public arity5_const_mf, public arity0pmf_const { public: typedef typename arity5_function::result_type result_type; typedef typename arity5_function::first_argument_type first_argument_type; typedef typename arity5_function::second_argument_type second_argument_type; typedef typename arity5_const_mf::object_type object_type; explicit inline arity5pmf_const(pmf5type pmfi) : arity0pmf_const(reinterpret_cast(pmfi)) {} inline arity5pmf_const(const arity5pmf_const& pmfi) : arity0pmf_const(pmfi) {} inline virtual R operator()(const Object& o, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4, a5); } }; // Template Function for arity 5 const pmf storage template inline arity5pmf_const arity5_const_member(R (Object::*const pmfi)(A1, A2, A3, A4, A5) const) { return arity5pmf_const(pmfi); }; // Template Class for arity 5 obj&pmf ref storage template class arity5opmf: public arity5pmf, public store_object { public: explicit inline arity5opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), arity5pmf(f) {} explicit inline arity5opmf(typename Function::object_type& oi, pmf5type pmfi) : store_object(oi), arity5pmf(pmfi) {} inline arity5opmf(const arity5opmf& bndri) : store_object(bndri), arity5pmf(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4, a5); } }; // Template Function for arity 5 obj&pmf ref storage template inline arity5opmf arity5_member_obj(Object& oi, const Function &f) { return arity5opmf(typename Function::object_type(oi), Function::pmf5type(f.pmf0)); }; // Template Class for arity 5 const obj&pmf ref storage template class arity5opmf_const: public arity5pmf_const, public store_object { public: explicit inline arity5opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), arity5pmf_const(f) {} explicit inline arity5opmf_const(typename Function::object_type& oi, pmf5type pmfi) : store_object(oi), arity5pmf_const(pmfi) {} inline arity5opmf_const(const arity5opmf_const& bndri) : store_object(bndri), arity5pmf_const(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4, a5); } }; // Template Function for arity 5 const obj&pmf ref storage template inline arity5opmf_const arity5_const_member_obj(Object& oi, const Function &f) { return arity5opmf_const(Function::object_type(oi), Function::pmf5type(f.pmf0)); }; // storage allocation classes for arity 6 // Template Class for arity 6 pmf storage template class arity6pmf: public arity6_mf, public arity0pmf { public: typedef typename arity6_function::result_type result_type; typedef typename arity6_function::first_argument_type first_argument_type; typedef typename arity6_function::second_argument_type second_argument_type; typedef typename arity6_mf::object_type object_type; explicit inline arity6pmf(pmf6type pmfi) : arity0pmf(reinterpret_cast(pmfi)) {} inline arity6pmf(const arity6pmf& pmfi) : arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4, a5, a6); } }; // Template Function for arity 6 pmf storage template inline arity6pmf arity6_member(R (Object::*const pmfi)(A1, A2, A3, A4, A5, A6)) { return arity6pmf(pmfi); }; // Template Class for arity 6 const pmf storage template class arity6pmf_const: public arity6_const_mf, public arity0pmf_const { public: typedef typename arity6_function::result_type result_type; typedef typename arity6_function::first_argument_type first_argument_type; typedef typename arity6_function::second_argument_type second_argument_type; typedef typename arity6_const_mf::object_type object_type; explicit inline arity6pmf_const(pmf6type pmfi) : arity0pmf_const(reinterpret_cast(pmfi)) {} inline arity6pmf_const(const arity6pmf_const& pmfi) : arity0pmf_const(pmfi) {} inline virtual R operator()(const Object& o, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4, a5, a6); } }; // Template Function for arity 6 const pmf storage template inline arity6pmf_const arity6_const_member(R (Object::*const pmfi)(A1, A2, A3, A4, A5, A6) const) { return arity6pmf_const(pmfi); }; // Template Class for arity 6 obj&pmf ref storage template class arity6opmf: public arity6pmf, public store_object { public: explicit inline arity6opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), arity6pmf(f) {} explicit inline arity6opmf(typename Function::object_type& oi, pmf6type pmfi) : store_object(oi), arity6pmf(pmfi) {} inline arity6opmf(const arity6opmf& bndri) : store_object(bndri), arity6pmf(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4, a5, a6); } }; // Template Function for arity 6 obj&pmf ref storage template inline arity6opmf arity6_member_obj(Object& oi, const Function &f) { return arity6opmf(Function::object_type(oi), Function::pmf6type(f.pmf0)); }; // Template Class for arity 6 const obj&pmf ref storage template class arity6opmf_const: public arity6pmf_const, public store_object { public: explicit inline arity6opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), arity6pmf_const(f) {} explicit inline arity6opmf_const(typename Function::object_type& oi, pmf6type pmfi) : store_object(oi), arity6pmf_const(pmfi) {} inline arity6opmf_const(const arity6opmf_const& bndri) : store_object(bndri), arity6pmf_const(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4, a5, a6); } }; // Template Function for arity 6 const obj&pmf ref storage template inline arity6opmf_const arity6_const_member_obj(Object& oi, const Function &f) { return arity6opmf_const(Function::object_type(oi), Function::pmf6type(f.pmf0)); }; #if defined(_M_ALPHA) || (_MSC_VER < 1300) // Template Function for arity 3 pmf storage template inline arity3pmf arity3_member(R (Object::*const pmfi)(A1, const A2, const A3)) { return arity3pmf(pmfi); }; #endif #if defined(_M_ALPHA) || (_MSC_VER < 1300) // Template Function for arity 4 const pmf storage template inline arity4pmf_const arity4_const_member(R (Object::*const pmfi)(const A1, const A2, A3, const A4) const) { return arity4pmf_const(pmfi); }; #endif // storage allocation classes for arity 0 // Template Class for arity 0 function ptr storage template class std_arity0fp: public arity0_function { public: typedef R ( __stdcall *const pf0type) (); explicit inline std_arity0fp(pf0type pfi) : pf0(pfi) {} inline std_arity0fp(const std_arity0fp& fi) : pf0(fi.pf0) {} inline R operator()() const { return pf0(); } pf0type pf0; }; // Template Function for arity 0 function ptr storage template inline std_arity0fp std_arity0_pointer(R ( __stdcall *const pfi)()) { return std_arity0fp(pfi); }; // Template Class for arity 0 pmf storage template class std_arity0pmf: public std_arity0_mf { public: typedef typename std_arity0_mf::object_type object_type; explicit inline std_arity0pmf(pmf0type pmfi) : pmf0(pmfi) {} inline std_arity0pmf(const std_arity0pmf& pmfi) : pmf0(pmfi.pmf0) {} inline virtual R operator()(Object& o ) const { return (o.*pmf0)(); } pmf0type pmf0; }; // Template Function for arity 0 pmf storage template inline std_arity0pmf std_arity0_member(R ( __stdcall Object::*const pmfi)()) { return std_arity0pmf(pmfi); }; // Template Class for arity 0 const pmf storage template class std_arity0pmf_const: public std_arity0_const_mf { public: typedef typename std_arity0_const_mf::object_type object_type; explicit inline std_arity0pmf_const(pmf0type pmfi) : pmf0(pmfi) {} inline std_arity0pmf_const(const std_arity0pmf_const& pmfi) : pmf0(pmfi.pmf0) {} inline virtual R operator()(const Object& o ) const { return (o.*pmf0)(); } pmf0type pmf0; }; // Template Function for arity 0 const pmf storage template inline std_arity0pmf_const std_arity0_const_member(R ( __stdcall Object::*const pmfi)() const) { return std_arity0pmf_const(pmfi); }; template class std_arity0pmf_ptr: public std_arity0pmf, public std::unary_function { public: explicit inline std_arity0pmf_ptr(pmf0type pmfi) : std_arity0pmf(pmfi) {} inline std_arity0pmf_ptr(const std_arity0pmf_ptr& pmfi) : std_arity0pmf(pmfi) {} inline virtual R operator()(Object& o ) const { return (o.*pmf0)(); } inline virtual R operator()(Object* o ) const { return (o->*pmf0)(); } }; // Template Function for arity 0 pmf storage template inline std_arity0pmf_ptr std_arity0_member_ptr(R (__stdcall Object::*const pmfi)()) { return std_arity0pmf_ptr(pmfi); }; // Template Class for arity 0 obj&pmf ref storage template class std_arity0opmf: public std_arity0pmf, public store_object { public: explicit inline std_arity0opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity0pmf(f) {} explicit inline std_arity0opmf(typename Function::object_type& oi, pmf0type pmfi) : store_object(oi), std_arity0pmf(pmfi) {} inline std_arity0opmf(const std_arity0opmf& bndri) : store_object(bndri), std_arity0pmf(bndri) {} inline typename Function::result_type operator()() const { return (objval.*pmf0)(); } pmf0type pmf0; }; // Template Function for arity 0 obj&pmf ref storage template inline std_arity0opmf std_arity0_member_obj(Object& oi, const Function &f) { return std_arity0opmf(Function::object_type(oi), Function::pmf0type(f.pmf0)); }; // Template Class for arity 0 const obj&pmf ref storage template class std_arity0opmf_const: public std_arity0pmf_const, public store_object { public: explicit inline std_arity0opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity0pmf_const(f) {} explicit inline std_arity0opmf_const(typename Function::object_type& oi, pmf0type pmfi) : store_object(oi), std_arity0pmf_const(pmfi) {} inline std_arity0opmf_const(const std_arity0opmf_const& bndri) : store_object(bndri), std_arity0pmf_const(bndri) {} inline typename Function::result_type operator()() const { return (objval.*pmf0)(); } pmf0type pmf0; }; // Template Function for arity 0 const obj&pmf ref storage template inline std_arity0opmf_const std_arity0_const_member_obj(Object& oi, const Function &f) { return std_arity0opmf_const(Function::object_type(oi), Function::pmf0type(f.pmf0)); }; // storage allocation classes for arity 1 // Template Class for arity 1 function ptr storage template class std_arity1fp: public std::unary_function, public std_arity0fp { public: typedef typename std::unary_function::result_type result_type; typedef R ( __stdcall *const pf1type) (A1); explicit inline std_arity1fp(pf1type pfi) : std_arity0fp(reinterpret_cast(pfi)) {} inline std_arity1fp(const std_arity1fp& fi) : std_arity0fp(fi) {} inline R operator()(A1 a1) const { pf1type pf = reinterpret_cast(pf0); return pf(a1); } }; // Template Function for arity 1 function ptr storage template inline std_arity1fp std_arity1_pointer(R ( __stdcall *const pfi)(A1)) { return std_arity1fp(pfi); }; // Template Class for arity 1 pmf storage template class std_arity1pmf: public std_arity1_mf, public std_arity0pmf { public: typedef typename std::unary_function::result_type result_type; typedef typename std_arity1_mf::object_type object_type; explicit inline std_arity1pmf(pmf1type pmfi) : std_arity0pmf(reinterpret_cast(pmfi)) {} inline std_arity1pmf(const std_arity1pmf& pmfi) : std_arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1) const { pmf1type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1); } }; // Template Function for arity 1 pmf storage template inline std_arity1pmf std_arity1_member(R ( __stdcall Object::*const pmfi)(A1)) { return std_arity1pmf(pmfi); }; // Template Class for arity 1 const pmf storage template class std_arity1pmf_const: public std_arity1_const_mf, public std_arity0pmf_const { public: typedef typename std::unary_function::result_type result_type; typedef typename std_arity1_const_mf::object_type object_type; explicit inline std_arity1pmf_const(pmf1type pmfi) : std_arity0pmf_const(reinterpret_cast(pmfi)) {} inline std_arity1pmf_const(const std_arity1pmf_const& pmfi) : std_arity0pmf_const(pmfi) {} inline virtual R operator()(const Object& o, A1 a1) const { pmf1type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1); } }; // Template Function for arity 1 const pmf storage template inline std_arity1pmf_const std_arity1_const_member(R ( __stdcall Object::*const pmfi)(A1) const) { return std_arity1pmf_const(pmfi); }; // Template Class for arity 1 obj&pmf ref storage template class std_arity1opmf: public std_arity1pmf, public store_object { public: explicit inline std_arity1opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity1pmf(f) {} explicit inline std_arity1opmf(typename Function::object_type& oi, pmf1type pmfi) : store_object(oi), std_arity1pmf(pmfi) {} inline std_arity1opmf(const std_arity1opmf& bndri) : store_object(bndri), std_arity1pmf(bndri) {} inline typename Function::result_type operator()(typename Function::argument_type a1) const { pmf1type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1); } }; // Template Function for arity 1 obj&pmf ref storage template inline std_arity1opmf std_arity1_member_obj(Object& oi, const Function &f) { return std_arity1opmf(Function::object_type(oi), Function::pmf1type(f.pmf0)); }; // Template Class for arity 1 const obj&pmf ref storage template class std_arity1opmf_const: public std_arity1pmf_const, public store_object { public: explicit inline std_arity1opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity1pmf_const(f) {} explicit inline std_arity1opmf_const(typename Function::object_type& oi, pmf1type pmfi) : store_object(oi), std_arity1pmf_const(pmfi) {} inline std_arity1opmf_const(const std_arity1opmf_const& bndri) : store_object(bndri), std_arity1pmf_const(bndri) {} inline typename Function::result_type operator()(typename Function::argument_type a1) const { pmf1type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1); } }; // Template Function for arity 1 const obj&pmf ref storage template inline std_arity1opmf_const std_arity1_const_member_obj(Object& oi, const Function &f) { return std_arity1opmf_const(Function::object_type(oi), Function::pmf1type(f.pmf0)); }; // storage allocation classes for arity 2 // Template Class for arity 2 function ptr storage template class std_arity2fp: public std::binary_function, public std_arity0fp { public: typedef typename std::binary_function::result_type result_type; typedef typename std::binary_function::first_argument_type first_argument_type; typedef R ( __stdcall *const pf2type) (A1, A2); explicit inline std_arity2fp(pf2type pfi) : std_arity0fp(reinterpret_cast(pfi)) {} inline std_arity2fp(const std_arity2fp& fi) : std_arity0fp(fi) {} inline R operator()(A1 a1, A2 a2) const { pf2type pf = reinterpret_cast(pf0); return pf(a1, a2); } }; // Template Function for arity 2 function ptr storage template inline std_arity2fp std_arity2_pointer(R ( __stdcall *const pfi)(A1, A2)) { return std_arity2fp(pfi); }; // Template Class for arity 2 pmf storage template class std_arity2pmf: public std_arity2_mf, public std_arity0pmf { public: typedef typename std::binary_function::result_type result_type; typedef typename std::binary_function::first_argument_type first_argument_type; typedef typename std_arity2_mf::object_type object_type; explicit inline std_arity2pmf(pmf2type pmfi) : std_arity0pmf(reinterpret_cast(pmfi)) {} inline std_arity2pmf(const std_arity2pmf& pmfi) : std_arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1, A2 a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2); } }; // Template Function for arity 2 pmf storage template inline std_arity2pmf std_arity2_member(R ( __stdcall Object::*const pmfi)(A1, A2)) { return std_arity2pmf(pmfi); }; // Template Class for arity 2 const pmf storage template class std_arity2pmf_const: public std_arity2_const_mf, public std_arity0pmf_const { public: typedef typename std::binary_function::result_type result_type; typedef typename std::binary_function::first_argument_type first_argument_type; typedef typename std_arity2_const_mf::object_type object_type; explicit inline std_arity2pmf_const(pmf2type pmfi) : std_arity0pmf_const(reinterpret_cast(pmfi)) {} inline std_arity2pmf_const(const std_arity2pmf_const& pmfi) : std_arity0pmf_const(pmfi) {} inline virtual R operator()(const Object& o, A1 a1, A2 a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2); } }; // Template Function for arity 2 const pmf storage template inline std_arity2pmf_const std_arity2_const_member(R ( __stdcall Object::*const pmfi)(A1, A2) const) { return std_arity2pmf_const(pmfi); }; // Template Class for arity 2 obj&pmf ref storage template class std_arity2opmf: public std_arity2pmf, public store_object { public: explicit inline std_arity2opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity2pmf(f) {} explicit inline std_arity2opmf(typename Function::object_type& oi, pmf2type pmfi) : store_object(oi), std_arity2pmf(pmfi) {} inline std_arity2opmf(const std_arity2opmf& bndri) : store_object(bndri), std_arity2pmf(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2); } }; // Template Function for arity 2 obj&pmf ref storage template inline std_arity2opmf std_arity2_member_obj(Object& oi, const Function &f) { return std_arity2opmf(Function::object_type(oi), Function::pmf2type(f.pmf0)); }; // Template Class for arity 2 const obj&pmf ref storage template class std_arity2opmf_const: public std_arity2pmf_const, public store_object { public: explicit inline std_arity2opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity2pmf_const(f) {} explicit inline std_arity2opmf_const(typename Function::object_type& oi, pmf2type pmfi) : store_object(oi), std_arity2pmf_const(pmfi) {} inline std_arity2opmf_const(const std_arity2opmf_const& bndri) : store_object(bndri), std_arity2pmf_const(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2); } }; // Template Function for arity 2 const obj&pmf ref storage template inline std_arity2opmf_const std_arity2_const_member_obj(Object& oi, const Function &f) { return std_arity2opmf_const(Function::object_type(oi), Function::pmf2type(f.pmf0)); }; // storage allocation classes for arity 3 // Template Class for arity 3 function ptr storage template class std_arity3fp: public arity3_function, public std_arity0fp { public: typedef typename arity3_function::result_type result_type; typedef typename arity3_function::first_argument_type first_argument_type; typedef typename arity3_function::second_argument_type second_argument_type; typedef R ( __stdcall *const pf3type) (A1, A2, A3); explicit inline std_arity3fp(pf3type pfi) : std_arity0fp(reinterpret_cast(pfi)) {} inline std_arity3fp(const std_arity3fp& fi) : std_arity0fp(fi) {} inline R operator()(A1 a1, A2 a2, A3 a3) const { pf3type pf = reinterpret_cast(pf0); return pf(a1, a2, a3); } }; // Template Function for arity 3 function ptr storage template inline std_arity3fp std_arity3_pointer(R ( __stdcall *const pfi)(A1, A2, A3)) { return std_arity3fp(pfi); }; // Template Class for arity 3 pmf storage template class std_arity3pmf: public std_arity3_mf, public std_arity0pmf { public: typedef typename arity3_function::result_type result_type; typedef typename arity3_function::first_argument_type first_argument_type; typedef typename arity3_function::second_argument_type second_argument_type; typedef typename std_arity3_mf::object_type object_type; explicit inline std_arity3pmf(pmf3type pmfi) : std_arity0pmf(reinterpret_cast(pmfi)) {} inline std_arity3pmf(const std_arity3pmf& pmfi) : std_arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1, A2 a2, A3 a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3); } }; // Template Function for arity 3 pmf storage template inline std_arity3pmf std_arity3_member(R ( __stdcall Object::*const pmfi)(A1, A2, A3)) { return std_arity3pmf(pmfi); }; // Template Class for arity 3 const pmf storage template class std_arity3pmf_const: public std_arity3_const_mf, public std_arity0pmf_const { public: typedef typename arity3_function::result_type result_type; typedef typename arity3_function::first_argument_type first_argument_type; typedef typename arity3_function::second_argument_type second_argument_type; typedef typename std_arity3_const_mf::object_type object_type; explicit inline std_arity3pmf_const(pmf3type pmfi) : std_arity0pmf_const(reinterpret_cast(pmfi)) {} inline std_arity3pmf_const(const std_arity3pmf_const& pmfi) : std_arity0pmf_const(pmfi) {} inline virtual R operator()(const Object& o, A1 a1, A2 a2, A3 a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3); } }; // Template Function for arity 3 const pmf storage template inline std_arity3pmf_const std_arity3_const_member(R ( __stdcall Object::*const pmfi)(A1, A2, A3) const) { return std_arity3pmf_const(pmfi); }; // Template Class for arity 3 obj&pmf ref storage template class std_arity3opmf: public std_arity3pmf, public store_object { public: explicit inline std_arity3opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity3pmf(f) {} explicit inline std_arity3opmf(typename Function::object_type& oi, pmf3type pmfi) : store_object(oi), std_arity3pmf(pmfi) {} inline std_arity3opmf(const std_arity3opmf& bndri) : store_object(bndri), std_arity3pmf(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3); } }; // Template Function for arity 3 obj&pmf ref storage template inline std_arity3opmf std_arity3_member_obj(Object& oi, const Function &f) { return std_arity3opmf(Function::object_type(oi), Function::pmf3type(f.pmf0)); }; // Template Class for arity 3 const obj&pmf ref storage template class std_arity3opmf_const: public std_arity3pmf_const, public store_object { public: explicit inline std_arity3opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity3pmf_const(f) {} explicit inline std_arity3opmf_const(typename Function::object_type& oi, pmf3type pmfi) : store_object(oi), std_arity3pmf_const(pmfi) {} inline std_arity3opmf_const(const std_arity3opmf_const& bndri) : store_object(bndri), std_arity3pmf_const(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3); } }; // Template Function for arity 3 const obj&pmf ref storage template inline std_arity3opmf_const std_arity3_const_member_obj(Object& oi, const Function &f) { return std_arity3opmf_const(typename Function::object_type(oi), typename Function::pmf3type(f.pmf0)); }; // storage allocation classes for arity 4 // Template Class for arity 4 pmf storage template class std_arity4pmf: public std_arity4_mf, public std_arity0pmf { public: typedef typename arity4_function::result_type result_type; typedef typename arity4_function::first_argument_type first_argument_type; typedef typename arity4_function::second_argument_type second_argument_type; typedef typename std_arity4_mf::object_type object_type; explicit inline std_arity4pmf(pmf4type pmfi) : std_arity0pmf(reinterpret_cast(pmfi)) {} inline std_arity4pmf(const std_arity4pmf& pmfi) : std_arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1, A2 a2, A3 a3, A4 a4) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4); } }; // Template Function for arity 4 pmf storage template inline std_arity4pmf std_arity4_member(R ( __stdcall Object::*const pmfi)(A1, A2, A3, A4)) { return std_arity4pmf(pmfi); }; // Template Class for arity 4 const pmf storage template class std_arity4pmf_const: public std_arity4_const_mf, public std_arity0pmf_const { public: typedef typename arity4_function::result_type result_type; typedef typename arity4_function::first_argument_type first_argument_type; typedef typename arity4_function::second_argument_type second_argument_type; typedef typename std_arity4_const_mf::object_type object_type; explicit inline std_arity4pmf_const(pmf4type pmfi) : std_arity0pmf_const(reinterpret_cast(pmfi)) {} inline std_arity4pmf_const(const std_arity4pmf_const& pmfi) : std_arity0pmf_const(pmfi) {} inline virtual R operator()(const Object& o, A1 a1, A2 a2, A3 a3, A4 a4) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4); } }; // Template Function for arity 4 const pmf storage template inline std_arity4pmf_const std_arity4_const_member(R ( __stdcall Object::*const pmfi)(A1, A2, A3, A4) const) { return std_arity4pmf_const(pmfi); }; // Template Class for arity 4 obj&pmf ref storage template class std_arity4opmf: public std_arity4pmf, public store_object { public: explicit inline std_arity4opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity4pmf(f) {} explicit inline std_arity4opmf(typename Function::object_type& oi, pmf4type pmfi) : store_object(oi), std_arity4pmf(pmfi) {} inline std_arity4opmf(const std_arity4opmf& bndri) : store_object(bndri), std_arity4pmf(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4); } }; // Template Function for arity 4 obj&pmf ref storage template inline std_arity4opmf std_arity4_member_obj(Object& oi, const Function &f) { return std_arity4opmf(typename Function::object_type(oi), typename Function::pmf4type(f.pmf0)); }; // Template Class for arity 4 const obj&pmf ref storage template class std_arity4opmf_const: public std_arity4pmf_const, public store_object { public: explicit inline std_arity4opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity4pmf_const(f) {} explicit inline std_arity4opmf_const(typename Function::object_type& oi, pmf4type pmfi) : store_object(oi), std_arity4pmf_const(pmfi) {} inline std_arity4opmf_const(const std_arity4opmf_const& bndri) : store_object(bndri), std_arity4pmf_const(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4); } }; // Template Function for arity 4 const obj&pmf ref storage template inline std_arity4opmf_const std_arity4_const_member_obj(Object& oi, const Function &f) { return std_arity4opmf_const(typename Function::object_type(oi), typename Function::pmf4type(f.pmf0)); }; // storage allocation classes for arity 5 // Template Class for arity 5 pmf storage template class std_arity5pmf: public std_arity5_mf, public std_arity0pmf { public: typedef typename arity5_function::result_type result_type; typedef typename arity5_function::first_argument_type first_argument_type; typedef typename arity5_function::second_argument_type second_argument_type; typedef typename std_arity5_mf::object_type object_type; explicit inline std_arity5pmf(pmf5type pmfi) : std_arity0pmf(reinterpret_cast(pmfi)) {} inline std_arity5pmf(const std_arity5pmf& pmfi) : std_arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4, a5); } }; // Template Function for arity 5 pmf storage template inline std_arity5pmf std_arity5_member(R ( __stdcall Object::*const pmfi)(A1, A2, A3, A4, A5)) { return std_arity5pmf(pmfi); }; // Template Class for arity 5 const pmf storage template class std_arity5pmf_const: public std_arity5_const_mf, public std_arity0pmf_const { public: typedef typename arity5_function::result_type result_type; typedef typename arity5_function::first_argument_type first_argument_type; typedef typename arity5_function::second_argument_type second_argument_type; typedef typename std_arity5_const_mf::object_type object_type; explicit inline std_arity5pmf_const(pmf5type pmfi) : std_arity0pmf_const(reinterpret_cast(pmfi)) {} inline std_arity5pmf_const(const std_arity5pmf_const& pmfi) : std_arity0pmf_const(pmfi) {} inline virtual R operator()(const Object& o, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4, a5); } }; // Template Function for arity 5 const pmf storage template inline std_arity5pmf_const std_arity5_const_member(R ( __stdcall Object::*const pmfi)(A1, A2, A3, A4, A5) const) { return std_arity5pmf_const(pmfi); }; // Template Class for arity 5 obj&pmf ref storage template class std_arity5opmf: public std_arity5pmf, public store_object { public: explicit inline std_arity5opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity5pmf(f) {} explicit inline std_arity5opmf(typename Function::object_type& oi, pmf5type pmfi) : store_object(oi), std_arity5pmf(pmfi) {} inline std_arity5opmf(const std_arity5opmf& bndri) : store_object(bndri), std_arity5pmf(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4, a5); } }; // Template Function for arity 5 obj&pmf ref storage template inline std_arity5opmf std_arity5_member_obj(Object& oi, const Function &f) { return std_arity5opmf(typename Function::object_type(oi), typename Function::pmf5type(f.pmf0)); }; // Template Class for arity 5 const obj&pmf ref storage template class std_arity5opmf_const: public std_arity5pmf_const, public store_object { public: explicit inline std_arity5opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity5pmf_const(f) {} explicit inline std_arity5opmf_const(typename Function::object_type& oi, pmf5type pmfi) : store_object(oi), std_arity5pmf_const(pmfi) {} inline std_arity5opmf_const(const std_arity5opmf_const& bndri) : store_object(bndri), std_arity5pmf_const(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4, a5); } }; // Template Function for arity 5 const obj&pmf ref storage template inline std_arity5opmf_const std_arity5_const_member_obj(Object& oi, const Function &f) { return std_arity5opmf_const(typename Function::object_type(oi), typename Function::pmf5type(f.pmf0)); }; // storage allocation classes for arity 6 // Template Class for arity 6 pmf storage template class std_arity6pmf: public std_arity6_mf, public std_arity0pmf { public: typedef typename arity6_function::result_type result_type; typedef typename arity6_function::first_argument_type first_argument_type; typedef typename arity6_function::second_argument_type second_argument_type; typedef typename std_arity6_mf::object_type object_type; explicit inline std_arity6pmf(pmf6type pmfi) : std_arity0pmf(reinterpret_cast(pmfi)) {} inline std_arity6pmf(const std_arity6pmf& pmfi) : std_arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4, a5, a6); } }; // Template Function for arity 6 pmf storage template inline std_arity6pmf std_arity6_member(R ( __stdcall Object::*const pmfi)(A1, A2, A3, A4, A5, A6)) { return std_arity6pmf(pmfi); }; // Template Class for arity 6 const pmf storage template class std_arity6pmf_const: public std_arity6_const_mf, public std_arity0pmf_const { public: typedef typename arity6_function::result_type result_type; typedef typename arity6_function::first_argument_type first_argument_type; typedef typename arity6_function::second_argument_type second_argument_type; typedef typename std_arity6_const_mf::object_type object_type; explicit inline std_arity6pmf_const(pmf6type pmfi) : std_arity0pmf_const(reinterpret_cast(pmfi)) {} inline std_arity6pmf_const(const std_arity6pmf_const& pmfi) : std_arity0pmf_const(pmfi) {} inline virtual R operator()(const Object& o, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4, a5, a6); } }; // Template Function for arity 6 const pmf storage template inline std_arity6pmf_const std_arity6_const_member(R ( __stdcall Object::*const pmfi)(A1, A2, A3, A4, A5, A6) const) { return std_arity6pmf_const(pmfi); }; // Template Class for arity 6 obj&pmf ref storage template class std_arity6opmf: public std_arity6pmf, public store_object { public: explicit inline std_arity6opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity6pmf(f) {} explicit inline std_arity6opmf(typename Function::object_type& oi, pmf6type pmfi) : store_object(oi), std_arity6pmf(pmfi) {} inline std_arity6opmf(const std_arity6opmf& bndri) : store_object(bndri), std_arity6pmf(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4, a5, a6); } }; // Template Function for arity 6 obj&pmf ref storage template inline std_arity6opmf std_arity6_member_obj(Object& oi, const Function &f) { return std_arity6opmf(typename Function::object_type(oi), typename Function::pmf6type(f.pmf0)); }; // Template Class for arity 6 const obj&pmf ref storage template class std_arity6opmf_const: public std_arity6pmf_const, public store_object { public: explicit inline std_arity6opmf_const(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity6pmf_const(f) {} explicit inline std_arity6opmf_const(typename Function::object_type& oi, pmf6type pmfi) : store_object(oi), std_arity6pmf_const(pmfi) {} inline std_arity6opmf_const(const std_arity6opmf_const& bndri) : store_object(bndri), std_arity6pmf_const(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4, a5, a6); } }; // Template Function for arity 6 const obj&pmf ref storage template inline std_arity6opmf_const std_arity6_const_member_obj(Object& oi, const Function &f) { return std_arity6opmf_const(typename Function::object_type(oi), typename Function::pmf6type(f.pmf0)); }; // Template Class for arity 15 pmf storage template class std_arity15pmf: public std_arity15_mf, public std_arity0pmf { public: typedef typename arity15_function::result_type result_type; typedef typename arity15_function::first_argument_type first_argument_type; typedef typename arity15_function::second_argument_type second_argument_type; typedef typename std_arity15_mf::object_type object_type; explicit inline std_arity15pmf(pmf15type pmfi) : std_arity0pmf(reinterpret_cast(pmfi)) {} inline std_arity15pmf(const std_arity15pmf& pmfi) : std_arity0pmf(pmfi) {} inline virtual R operator()(Object& o, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14, A15 a15) const { pmf15type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); } }; // Template Function for arity 15 pmf storage template inline std_arity15pmf std_arity15_member(R ( __stdcall Object::*const pmfi)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15)) { return std_arity15pmf(pmfi); }; // Template Class for arity 15 obj&pmf ref storage template class std_arity15opmf: public std_arity15pmf, public store_object { public: explicit inline std_arity15opmf(typename Function::object_type& oi, const Function &f) : store_object(oi), std_arity15pmf(f) {} explicit inline std_arity15opmf(typename Function::object_type& oi, pmf15type pmfi) : store_object(oi), std_arity15pmf(pmfi) {} inline std_arity15opmf(const std_arity15opmf& bndri) : store_object(bndri), std_arity15pmf(bndri) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) const { pmf15type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); } }; // Template Function for arity 15 obj&pmf ref storage template inline std_arity15opmf std_arity15_member_obj(Object& oi, const Function &f) { return std_arity15opmf(typename Function::object_type(oi), typename Function::pmf15type(f.pmf0)); }; /////////////////////////////////////////// // Binders /////////////////////////////////////////// // // binders for arity 2 // // Template Classes for binding arity 2 to arity 1 // Template Classes for binding function ptrs of arity 2 to arity 1 template class bndr_2 : public arity1fp { public: typedef typename Function::result_type (*const pf2type) (typename Function::first_argument_type, typename Function::second_argument_type); explicit inline bndr_2(const Function &f, typename Function::second_argument_type a2) : arity1fp(reinterpret_cast(f.pf0)), arg2val(a2) {} inline bndr_2(const bndr_2& bndri) : arity1fp(reinterpret_cast(bndri.pf0)), arg2val(bndri.arg2val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pf2type pf = reinterpret_cast(pf0); return pf(a1, arg2val); } public: typename Function::second_argument_type arg2val; }; template class bndr_1 : public arity1fp { public: typedef typename Function::result_type (*const pf2type) (typename Function::first_argument_type, typename Function::second_argument_type); explicit inline bndr_1(const Function &f, typename Function::first_argument_type a1) : arity1fp(reinterpret_cast(f.pf0)), arg1val(a1) {} inline bndr_1(const bndr_1& bndri) : arity1fp(reinterpret_cast(bndri.pf0)), arg1val(bndri.arg1val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pf2type pf = reinterpret_cast(pf0); return pf(arg1val, a2); } public: typename Function::first_argument_type arg1val; }; // Template Classes for binding pmf of arity 2 to arity 1 template class bndr_mf_2 : public arity1pmf, private arity2_mf { public: explicit inline bndr_mf_2(const Function &f, typename Function::second_argument_type a2) : arity1pmf(reinterpret_cast(f.pmf0)), arity2_mf(f), arg2val(a2) {} inline bndr_mf_2(const bndr_mf_2& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity2_mf(bndri), arg2val(bndri.arg2val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf2type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val); } public: typename Function::second_argument_type arg2val; }; template class bndr_mf_1 : public arity1pmf, private arity2_mf { public: explicit inline bndr_mf_1(const Function &f, typename Function::first_argument_type a1) : arity1pmf(reinterpret_cast(f.pmf0)), arity2_mf(f), arg1val(a1) {} inline bndr_mf_1(const bndr_mf_1& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity2_mf(bndri), arg1val(bndri.arg1val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2); } public: typename Function::first_argument_type arg1val; }; // Template Classes for binding const pmf of arity 2 to arity 1 template class bndr_const_mf_2 : public arity1pmf_const, private arity2_const_mf { public: explicit inline bndr_const_mf_2(const Function &f, typename Function::second_argument_type a2) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity2_const_mf(f), arg2val(a2) {} inline bndr_const_mf_2(const bndr_const_mf_2& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity2_const_mf(bndri), arg2val(bndri.arg2val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf2type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val); } public: typename Function::second_argument_type arg2val; }; template class bndr_const_mf_1 : public arity1pmf_const, private arity2_const_mf { public: explicit inline bndr_const_mf_1(const Function &f, typename Function::first_argument_type a1) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity2_const_mf(f), arg1val(a1) {} inline bndr_const_mf_1(const bndr_const_mf_1& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity2_const_mf(bndri), arg1val(bndri.arg1val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2); } public: typename Function::first_argument_type arg1val; }; // Template Classes for binding obj&pmf Ref of arity 2 to arity 1 template class bndr_obj_2 : public arity1opmf, private arity2_mf { public: explicit inline bndr_obj_2(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity2_mf(f), arg2val(a2) {} inline bndr_obj_2(const bndr_obj_2& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity2_mf(bndri), arg2val(bndri.arg2val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf2type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val); } public: typename Function::second_argument_type arg2val; }; template class bndr_obj_1 : public arity1opmf, private arity2_mf { public: explicit inline bndr_obj_1(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity2_mf(f), arg1val(a1) {} inline bndr_obj_1(const bndr_obj_1& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity2_mf(bndri), arg1val(bndri.arg1val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2); } public: typename Function::first_argument_type arg1val; }; // Template Classes for binding const obj&pmf Ref of arity 2 to arity 1 template class bndr_const_obj_2 : public arity1opmf_const, private arity2_const_mf { public: explicit inline bndr_const_obj_2(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity2_const_mf(f), arg2val(a2) {} inline bndr_const_obj_2(const bndr_const_obj_2& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity2_const_mf(bndri), arg2val(bndri.arg2val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf2type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val); } public: typename Function::second_argument_type arg2val; }; template class bndr_const_obj_1 : public arity1opmf_const, private arity2_const_mf { public: explicit inline bndr_const_obj_1(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity2_const_mf(f), arg1val(a1) {} inline bndr_const_obj_1(const bndr_const_obj_1& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity2_const_mf(bndri), arg1val(bndri.arg1val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2); } public: typename Function::first_argument_type arg1val; }; // Template Functions for binding arity 2 to arity 1 // Template Functions for binding function ptrs of arity 2 to arity 1 template inline bndr_2 bind_fp_2(const Function &f, A2 a2) { return bndr_2(f, typename Function::second_argument_type(a2)); }; template inline bndr_1 bind_fp_1(const Function &f, A1 a1) { return bndr_1(f, typename Function::first_argument_type(a1)); }; // Template Functions for binding pmf of arity 2 to arity 1 template inline bndr_mf_2 bind_mf_2(const Function &f, A2 a2) { return bndr_mf_2(f, typename Function::second_argument_type(a2)); }; template inline bndr_mf_1 bind_mf_1(const Function &f, A1 a1) { return bndr_mf_1(f, typename Function::first_argument_type(a1)); }; // Template Functions for binding const pmf of arity 2 to arity 1 template inline bndr_const_mf_2 bind_const_mf_2(const Function &f, A2 a2) { return bndr_const_mf_2(f, typename Function::second_argument_type(a2)); }; template inline bndr_const_mf_1 bind_const_mf_1(const Function &f, A1 a1) { return bndr_const_mf_1(f, typename Function::first_argument_type(a1)); }; // Template Functions for binding obj&pmf Ref of arity 2 to arity 1 template inline bndr_obj_2 bind_obj_2(Object& oi, const Function &f, A2 a2) { return bndr_obj_2(static_cast(oi), f, typename Function::second_argument_type(a2)); }; template inline bndr_obj_1 bind_obj_1(Object& oi, const Function &f, A1 a1) { return bndr_obj_1(static_cast(oi), f, typename Function::first_argument_type(a1)); }; // Template Functions for binding const obj&pmf Ref of arity 2 to arity 1 template inline bndr_const_obj_2 bind_const_obj_2(const Object& oi, const Function &f, A2 a2) { return bndr_const_obj_2(static_cast(oi), f, typename Function::second_argument_type(a2)); }; template inline bndr_const_obj_1 bind_const_obj_1(const Object& oi, const Function &f, A1 a1) { return bndr_const_obj_1(static_cast(oi), f, typename Function::first_argument_type(a1)); }; // // binders for arity 3 // // Template Classes for binding arity 3 to arity 1 // Template Classes for binding function ptrs of arity 3 to arity 1 template class bndr_2_3 : public arity1fp { public: typedef typename Function::result_type (*const pf3type) (typename Function::first_argument_type, typename Function::second_argument_type, typename Function::argument_3_type); explicit inline bndr_2_3(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) : arity1fp(reinterpret_cast(f.pf0)), arg2val(a2), arg3val(a3) {} inline bndr_2_3(const bndr_2_3& bndri) : arity1fp(reinterpret_cast(bndri.pf0)), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pf3type pf = reinterpret_cast(pf0); return pf(a1, arg2val, arg3val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; }; template class bndr_1_3 : public arity1fp { public: typedef typename Function::result_type (*const pf3type) (typename Function::first_argument_type, typename Function::second_argument_type, typename Function::argument_3_type); explicit inline bndr_1_3(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) : arity1fp(reinterpret_cast(f.pf0)), arg1val(a1), arg3val(a3) {} inline bndr_1_3(const bndr_1_3& bndri) : arity1fp(reinterpret_cast(bndri.pf0)), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pf3type pf = reinterpret_cast(pf0); return pf(arg1val, a2, arg3val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; }; template class bndr_1_2 : public arity1fp { public: typedef typename Function::result_type (*const pf3type) (typename Function::first_argument_type, typename Function::second_argument_type, typename Function::argument_3_type); explicit inline bndr_1_2(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) : arity1fp(reinterpret_cast(f.pf0)), arg1val(a1), arg2val(a2) {} inline bndr_1_2(const bndr_1_2& bndri) : arity1fp(reinterpret_cast(bndri.pf0)), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pf3type pf = reinterpret_cast(pf0); return pf(arg1val, arg2val, a3); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; }; // Template Classes for binding pmf of arity 3 to arity 1 template class bndr_mf_2_3 : public arity1pmf, private arity3_mf { public: explicit inline bndr_mf_2_3(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) : arity1pmf(reinterpret_cast(f.pmf0)), arity3_mf(f), arg2val(a2), arg3val(a3) {} inline bndr_mf_2_3(const bndr_mf_2_3& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity3_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; }; template class bndr_mf_1_3 : public arity1pmf, private arity3_mf { public: explicit inline bndr_mf_1_3(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) : arity1pmf(reinterpret_cast(f.pmf0)), arity3_mf(f), arg1val(a1), arg3val(a3) {} inline bndr_mf_1_3(const bndr_mf_1_3& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity3_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; }; template class bndr_mf_1_2 : public arity1pmf, private arity3_mf { public: explicit inline bndr_mf_1_2(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) : arity1pmf(reinterpret_cast(f.pmf0)), arity3_mf(f), arg1val(a1), arg2val(a2) {} inline bndr_mf_1_2(const bndr_mf_1_2& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity3_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; }; // Template Classes for binding const pmf of arity 3 to arity 1 template class bndr_const_mf_2_3 : public arity1pmf_const, private arity3_const_mf { public: explicit inline bndr_const_mf_2_3(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity3_const_mf(f), arg2val(a2), arg3val(a3) {} inline bndr_const_mf_2_3(const bndr_const_mf_2_3& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity3_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; }; template class bndr_const_mf_1_3 : public arity1pmf_const, private arity3_const_mf { public: explicit inline bndr_const_mf_1_3(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity3_const_mf(f), arg1val(a1), arg3val(a3) {} inline bndr_const_mf_1_3(const bndr_const_mf_1_3& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity3_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; }; template class bndr_const_mf_1_2 : public arity1pmf_const, private arity3_const_mf { public: explicit inline bndr_const_mf_1_2(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity3_const_mf(f), arg1val(a1), arg2val(a2) {} inline bndr_const_mf_1_2(const bndr_const_mf_1_2& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity3_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; }; // Template Classes for binding obj&pmf Ref of arity 3 to arity 1 template class bndr_obj_2_3 : public arity1opmf, private arity3_mf { public: explicit inline bndr_obj_2_3(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity3_mf(f), arg2val(a2), arg3val(a3) {} inline bndr_obj_2_3(const bndr_obj_2_3& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity3_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; }; template class bndr_obj_1_3 : public arity1opmf, private arity3_mf { public: explicit inline bndr_obj_1_3(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity3_mf(f), arg1val(a1), arg3val(a3) {} inline bndr_obj_1_3(const bndr_obj_1_3& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity3_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; }; template class bndr_obj_1_2 : public arity1opmf, private arity3_mf { public: explicit inline bndr_obj_1_2(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity3_mf(f), arg1val(a1), arg2val(a2) {} inline bndr_obj_1_2(const bndr_obj_1_2& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity3_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; }; // Template Classes for binding const obj&pmf Ref of arity 3 to arity 1 template class bndr_const_obj_2_3 : public arity1opmf_const, private arity3_const_mf { public: explicit inline bndr_const_obj_2_3(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity3_const_mf(f), arg2val(a2), arg3val(a3) {} inline bndr_const_obj_2_3(const bndr_const_obj_2_3& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity3_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; }; template class bndr_const_obj_1_3 : public arity1opmf_const, private arity3_const_mf { public: explicit inline bndr_const_obj_1_3(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity3_const_mf(f), arg1val(a1), arg3val(a3) {} inline bndr_const_obj_1_3(const bndr_const_obj_1_3& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity3_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; }; template class bndr_const_obj_1_2 : public arity1opmf_const, private arity3_const_mf { public: explicit inline bndr_const_obj_1_2(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity3_const_mf(f), arg1val(a1), arg2val(a2) {} inline bndr_const_obj_1_2(const bndr_const_obj_1_2& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity3_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; }; // Template Functions for binding arity 3 to arity 1 // Template Functions for binding function ptrs of arity 3 to arity 1 template inline bndr_2_3 bind_fp_2_3(const Function &f, A2 a2, A3 a3) { return bndr_2_3(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3)); }; template inline bndr_1_3 bind_fp_1_3(const Function &f, A1 a1, A3 a3) { return bndr_1_3(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3)); }; template inline bndr_1_2 bind_fp_1_2(const Function &f, A1 a1, A2 a2) { return bndr_1_2(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2)); }; // Template Functions for binding pmf of arity 3 to arity 1 template inline bndr_mf_2_3 bind_mf_2_3(const Function &f, A2 a2, A3 a3) { return bndr_mf_2_3(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3)); }; template inline bndr_mf_1_3 bind_mf_1_3(const Function &f, A1 a1, A3 a3) { return bndr_mf_1_3(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3)); }; template inline bndr_mf_1_2 bind_mf_1_2(const Function &f, A1 a1, A2 a2) { return bndr_mf_1_2(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2)); }; // Template Functions for binding const pmf of arity 3 to arity 1 template inline bndr_const_mf_2_3 bind_const_mf_2_3(const Function &f, A2 a2, A3 a3) { return bndr_const_mf_2_3(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3)); }; template inline bndr_const_mf_1_3 bind_const_mf_1_3(const Function &f, A1 a1, A3 a3) { return bndr_const_mf_1_3(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3)); }; template inline bndr_const_mf_1_2 bind_const_mf_1_2(const Function &f, A1 a1, A2 a2) { return bndr_const_mf_1_2(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2)); }; // Template Functions for binding obj&pmf Ref of arity 3 to arity 1 template inline bndr_obj_2_3 bind_obj_2_3(Object& oi, const Function &f, A2 a2, A3 a3) { return bndr_obj_2_3(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3)); }; template inline bndr_obj_1_3 bind_obj_1_3(Object& oi, const Function &f, A1 a1, A3 a3) { return bndr_obj_1_3(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3)); }; template inline bndr_obj_1_2 bind_obj_1_2(Object& oi, const Function &f, A1 a1, A2 a2) { return bndr_obj_1_2(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2)); }; // Template Functions for binding const obj&pmf Ref of arity 3 to arity 1 template inline bndr_const_obj_2_3 bind_const_obj_2_3(const Object& oi, const Function &f, A2 a2, A3 a3) { return bndr_const_obj_2_3(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3)); }; template inline bndr_const_obj_1_3 bind_const_obj_1_3(const Object& oi, const Function &f, A1 a1, A3 a3) { return bndr_const_obj_1_3(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3)); }; template inline bndr_const_obj_1_2 bind_const_obj_1_2(const Object& oi, const Function &f, A1 a1, A2 a2) { return bndr_const_obj_1_2(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2)); }; // // binders for arity 4 // // Template Classes for binding arity 4 to arity 1 // Template Classes for binding pmf of arity 4 to arity 1 template class bndr_mf_2_3_4 : public arity1pmf, private arity4_mf { public: explicit inline bndr_mf_2_3_4(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : arity1pmf(reinterpret_cast(f.pmf0)), arity4_mf(f), arg2val(a2), arg3val(a3), arg4val(a4) {} inline bndr_mf_2_3_4(const bndr_mf_2_3_4& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity4_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class bndr_mf_1_3_4 : public arity1pmf, private arity4_mf { public: explicit inline bndr_mf_1_3_4(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : arity1pmf(reinterpret_cast(f.pmf0)), arity4_mf(f), arg1val(a1), arg3val(a3), arg4val(a4) {} inline bndr_mf_1_3_4(const bndr_mf_1_3_4& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity4_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class bndr_mf_1_2_4 : public arity1pmf, private arity4_mf { public: explicit inline bndr_mf_1_2_4(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) : arity1pmf(reinterpret_cast(f.pmf0)), arity4_mf(f), arg1val(a1), arg2val(a2), arg4val(a4) {} inline bndr_mf_1_2_4(const bndr_mf_1_2_4& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity4_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; }; // Template Classes for binding const pmf of arity 4 to arity 1 template class bndr_const_mf_2_3_4 : public arity1pmf_const, private arity4_const_mf { public: explicit inline bndr_const_mf_2_3_4(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity4_const_mf(f), arg2val(a2), arg3val(a3), arg4val(a4) {} inline bndr_const_mf_2_3_4(const bndr_const_mf_2_3_4& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity4_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class bndr_const_mf_1_3_4 : public arity1pmf_const, private arity4_const_mf { public: explicit inline bndr_const_mf_1_3_4(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity4_const_mf(f), arg1val(a1), arg3val(a3), arg4val(a4) {} inline bndr_const_mf_1_3_4(const bndr_const_mf_1_3_4& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity4_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class bndr_const_mf_1_2_4 : public arity1pmf_const, private arity4_const_mf { public: explicit inline bndr_const_mf_1_2_4(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity4_const_mf(f), arg1val(a1), arg2val(a2), arg4val(a4) {} inline bndr_const_mf_1_2_4(const bndr_const_mf_1_2_4& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity4_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; }; // Template Classes for binding obj&pmf Ref of arity 4 to arity 1 template class bndr_obj_2_3_4 : public arity1opmf, private arity4_mf { public: explicit inline bndr_obj_2_3_4(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity4_mf(f), arg2val(a2), arg3val(a3), arg4val(a4) {} inline bndr_obj_2_3_4(const bndr_obj_2_3_4& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity4_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class bndr_obj_1_3_4 : public arity1opmf, private arity4_mf { public: explicit inline bndr_obj_1_3_4(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity4_mf(f), arg1val(a1), arg3val(a3), arg4val(a4) {} inline bndr_obj_1_3_4(const bndr_obj_1_3_4& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity4_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class bndr_obj_1_2_4 : public arity1opmf, private arity4_mf { public: explicit inline bndr_obj_1_2_4(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity4_mf(f), arg1val(a1), arg2val(a2), arg4val(a4) {} inline bndr_obj_1_2_4(const bndr_obj_1_2_4& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity4_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; }; // Template Classes for binding const obj&pmf Ref of arity 4 to arity 1 template class bndr_const_obj_2_3_4 : public arity1opmf_const, private arity4_const_mf { public: explicit inline bndr_const_obj_2_3_4(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity4_const_mf(f), arg2val(a2), arg3val(a3), arg4val(a4) {} inline bndr_const_obj_2_3_4(const bndr_const_obj_2_3_4& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity4_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class bndr_const_obj_1_3_4 : public arity1opmf_const, private arity4_const_mf { public: explicit inline bndr_const_obj_1_3_4(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity4_const_mf(f), arg1val(a1), arg3val(a3), arg4val(a4) {} inline bndr_const_obj_1_3_4(const bndr_const_obj_1_3_4& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity4_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class bndr_const_obj_1_2_4 : public arity1opmf_const, private arity4_const_mf { public: explicit inline bndr_const_obj_1_2_4(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity4_const_mf(f), arg1val(a1), arg2val(a2), arg4val(a4) {} inline bndr_const_obj_1_2_4(const bndr_const_obj_1_2_4& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity4_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; }; // Template Functions for binding arity 4 to arity 1 // Template Functions for binding pmf of arity 4 to arity 1 template inline bndr_mf_2_3_4 bind_mf_2_3_4(const Function &f, A2 a2, A3 a3, A4 a4) { return bndr_mf_2_3_4(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline bndr_mf_1_3_4 bind_mf_1_3_4(const Function &f, A1 a1, A3 a3, A4 a4) { return bndr_mf_1_3_4(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline bndr_mf_1_2_4 bind_mf_1_2_4(const Function &f, A1 a1, A2 a2, A4 a4) { return bndr_mf_1_2_4(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4)); }; // Template Functions for binding const pmf of arity 4 to arity 1 template inline bndr_const_mf_2_3_4 bind_const_mf_2_3_4(const Function &f, A2 a2, A3 a3, A4 a4) { return bndr_const_mf_2_3_4(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline bndr_const_mf_1_3_4 bind_const_mf_1_3_4(const Function &f, A1 a1, A3 a3, A4 a4) { return bndr_const_mf_1_3_4(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline bndr_const_mf_1_2_4 bind_const_mf_1_2_4(const Function &f, A1 a1, A2 a2, A4 a4) { return bndr_const_mf_1_2_4(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4)); }; // Template Functions for binding obj&pmf Ref of arity 4 to arity 1 template inline bndr_obj_2_3_4 bind_obj_2_3_4(Object& oi, const Function &f, A2 a2, A3 a3, A4 a4) { return bndr_obj_2_3_4(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline bndr_obj_1_3_4 bind_obj_1_3_4(Object& oi, const Function &f, A1 a1, A3 a3, A4 a4) { return bndr_obj_1_3_4(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline bndr_obj_1_2_4 bind_obj_1_2_4(Object& oi, const Function &f, A1 a1, A2 a2, A4 a4) { return bndr_obj_1_2_4(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4)); }; // Template Functions for binding const obj&pmf Ref of arity 4 to arity 1 template inline bndr_const_obj_2_3_4 bind_const_obj_2_3_4(const Object& oi, const Function &f, A2 a2, A3 a3, A4 a4) { return bndr_const_obj_2_3_4(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline bndr_const_obj_1_3_4 bind_const_obj_1_3_4(const Object& oi, const Function &f, A1 a1, A3 a3, A4 a4) { return bndr_const_obj_1_3_4(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline bndr_const_obj_1_2_4 bind_const_obj_1_2_4(const Object& oi, const Function &f, A1 a1, A2 a2, A4 a4) { return bndr_const_obj_1_2_4(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4)); }; // // binders for arity 5 // // Template Classes for binding arity 5 to arity 1 // Template Classes for binding pmf of arity 5 to arity 1 template class bndr_mf_2_3_4_5 : public arity1pmf, private arity5_mf { public: explicit inline bndr_mf_2_3_4_5(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : arity1pmf(reinterpret_cast(f.pmf0)), arity5_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {} inline bndr_mf_2_3_4_5(const bndr_mf_2_3_4_5& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity5_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class bndr_mf_1_3_4_5 : public arity1pmf, private arity5_mf { public: explicit inline bndr_mf_1_3_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : arity1pmf(reinterpret_cast(f.pmf0)), arity5_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {} inline bndr_mf_1_3_4_5(const bndr_mf_1_3_4_5& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity5_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class bndr_mf_1_2_4_5 : public arity1pmf, private arity5_mf { public: explicit inline bndr_mf_1_2_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : arity1pmf(reinterpret_cast(f.pmf0)), arity5_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {} inline bndr_mf_1_2_4_5(const bndr_mf_1_2_4_5& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity5_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; // Template Classes for binding const pmf of arity 5 to arity 1 template class bndr_const_mf_2_3_4_5 : public arity1pmf_const, private arity5_const_mf { public: explicit inline bndr_const_mf_2_3_4_5(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity5_const_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {} inline bndr_const_mf_2_3_4_5(const bndr_const_mf_2_3_4_5& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity5_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class bndr_const_mf_1_3_4_5 : public arity1pmf_const, private arity5_const_mf { public: explicit inline bndr_const_mf_1_3_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity5_const_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {} inline bndr_const_mf_1_3_4_5(const bndr_const_mf_1_3_4_5& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity5_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class bndr_const_mf_1_2_4_5 : public arity1pmf_const, private arity5_const_mf { public: explicit inline bndr_const_mf_1_2_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity5_const_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {} inline bndr_const_mf_1_2_4_5(const bndr_const_mf_1_2_4_5& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity5_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; // Template Classes for binding obj&pmf Ref of arity 5 to arity 1 template class bndr_obj_2_3_4_5 : public arity1opmf, private arity5_mf { public: explicit inline bndr_obj_2_3_4_5(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity5_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {} inline bndr_obj_2_3_4_5(const bndr_obj_2_3_4_5& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity5_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class bndr_obj_1_3_4_5 : public arity1opmf, private arity5_mf { public: explicit inline bndr_obj_1_3_4_5(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity5_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {} inline bndr_obj_1_3_4_5(const bndr_obj_1_3_4_5& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity5_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class bndr_obj_1_2_4_5 : public arity1opmf, private arity5_mf { public: explicit inline bndr_obj_1_2_4_5(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity5_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {} inline bndr_obj_1_2_4_5(const bndr_obj_1_2_4_5& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity5_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; // Template Classes for binding const obj&pmf Ref of arity 5 to arity 1 template class bndr_const_obj_2_3_4_5 : public arity1opmf_const, private arity5_const_mf { public: explicit inline bndr_const_obj_2_3_4_5(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity5_const_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {} inline bndr_const_obj_2_3_4_5(const bndr_const_obj_2_3_4_5& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity5_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class bndr_const_obj_1_3_4_5 : public arity1opmf_const, private arity5_const_mf { public: explicit inline bndr_const_obj_1_3_4_5(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity5_const_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {} inline bndr_const_obj_1_3_4_5(const bndr_const_obj_1_3_4_5& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity5_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class bndr_const_obj_1_2_4_5 : public arity1opmf_const, private arity5_const_mf { public: explicit inline bndr_const_obj_1_2_4_5(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity5_const_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {} inline bndr_const_obj_1_2_4_5(const bndr_const_obj_1_2_4_5& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity5_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; // Template Functions for binding arity 5 to arity 1 // Template Functions for binding pmf of arity 5 to arity 1 template inline bndr_mf_2_3_4_5 bind_mf_2_3_4_5(const Function &f, A2 a2, A3 a3, A4 a4, A5 a5) { return bndr_mf_2_3_4_5(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline bndr_mf_1_3_4_5 bind_mf_1_3_4_5(const Function &f, A1 a1, A3 a3, A4 a4, A5 a5) { return bndr_mf_1_3_4_5(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline bndr_mf_1_2_4_5 bind_mf_1_2_4_5(const Function &f, A1 a1, A2 a2, A4 a4, A5 a5) { return bndr_mf_1_2_4_5(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; // Template Functions for binding const pmf of arity 5 to arity 1 template inline bndr_const_mf_2_3_4_5 bind_const_mf_2_3_4_5(const Function &f, A2 a2, A3 a3, A4 a4, A5 a5) { return bndr_const_mf_2_3_4_5(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline bndr_const_mf_1_3_4_5 bind_const_mf_1_3_4_5(const Function &f, A1 a1, A3 a3, A4 a4, A5 a5) { return bndr_const_mf_1_3_4_5(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline bndr_const_mf_1_2_4_5 bind_const_mf_1_2_4_5(const Function &f, A1 a1, A2 a2, A4 a4, A5 a5) { return bndr_const_mf_1_2_4_5(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; // Template Functions for binding obj&pmf Ref of arity 5 to arity 1 template inline bndr_obj_2_3_4_5 bind_obj_2_3_4_5(Object& oi, const Function &f, A2 a2, A3 a3, A4 a4, A5 a5) { return bndr_obj_2_3_4_5(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline bndr_obj_1_3_4_5 bind_obj_1_3_4_5(Object& oi, const Function &f, A1 a1, A3 a3, A4 a4, A5 a5) { return bndr_obj_1_3_4_5(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline bndr_obj_1_2_4_5 bind_obj_1_2_4_5(Object& oi, const Function &f, A1 a1, A2 a2, A4 a4, A5 a5) { return bndr_obj_1_2_4_5(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; // Template Functions for binding const obj&pmf Ref of arity 5 to arity 1 template inline bndr_const_obj_2_3_4_5 bind_const_obj_2_3_4_5(const Object& oi, const Function &f, A2 a2, A3 a3, A4 a4, A5 a5) { return bndr_const_obj_2_3_4_5(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline bndr_const_obj_1_3_4_5 bind_const_obj_1_3_4_5(const Object& oi, const Function &f, A1 a1, A3 a3, A4 a4, A5 a5) { return bndr_const_obj_1_3_4_5(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline bndr_const_obj_1_2_4_5 bind_const_obj_1_2_4_5(const Object& oi, const Function &f, A1 a1, A2 a2, A4 a4, A5 a5) { return bndr_const_obj_1_2_4_5(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; // // binders for arity 6 // // Template Classes for binding arity 6 to arity 1 // Template Classes for binding pmf of arity 6 to arity 1 template class bndr_mf_2_3_4_5_6 : public arity1pmf, private arity6_mf { public: explicit inline bndr_mf_2_3_4_5_6(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : arity1pmf(reinterpret_cast(f.pmf0)), arity6_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline bndr_mf_2_3_4_5_6(const bndr_mf_2_3_4_5_6& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity6_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class bndr_mf_1_3_4_5_6 : public arity1pmf, private arity6_mf { public: explicit inline bndr_mf_1_3_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : arity1pmf(reinterpret_cast(f.pmf0)), arity6_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline bndr_mf_1_3_4_5_6(const bndr_mf_1_3_4_5_6& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity6_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class bndr_mf_1_2_4_5_6 : public arity1pmf, private arity6_mf { public: explicit inline bndr_mf_1_2_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : arity1pmf(reinterpret_cast(f.pmf0)), arity6_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {} inline bndr_mf_1_2_4_5_6(const bndr_mf_1_2_4_5_6& bndri) : arity1pmf(reinterpret_cast(bndri.pmf0)), arity6_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; // Template Classes for binding const pmf of arity 6 to arity 1 template class bndr_const_mf_2_3_4_5_6 : public arity1pmf_const, private arity6_const_mf { public: explicit inline bndr_const_mf_2_3_4_5_6(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity6_const_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline bndr_const_mf_2_3_4_5_6(const bndr_const_mf_2_3_4_5_6& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity6_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class bndr_const_mf_1_3_4_5_6 : public arity1pmf_const, private arity6_const_mf { public: explicit inline bndr_const_mf_1_3_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity6_const_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline bndr_const_mf_1_3_4_5_6(const bndr_const_mf_1_3_4_5_6& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity6_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class bndr_const_mf_1_2_4_5_6 : public arity1pmf_const, private arity6_const_mf { public: explicit inline bndr_const_mf_1_2_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : arity1pmf_const(reinterpret_cast(f.pmf0)), arity6_const_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {} inline bndr_const_mf_1_2_4_5_6(const bndr_const_mf_1_2_4_5_6& bndri) : arity1pmf_const(reinterpret_cast(bndri.pmf0)), arity6_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; // Template Classes for binding obj&pmf Ref of arity 6 to arity 1 template class bndr_obj_2_3_4_5_6 : public arity1opmf, private arity6_mf { public: explicit inline bndr_obj_2_3_4_5_6(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity6_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline bndr_obj_2_3_4_5_6(const bndr_obj_2_3_4_5_6& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity6_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class bndr_obj_1_3_4_5_6 : public arity1opmf, private arity6_mf { public: explicit inline bndr_obj_1_3_4_5_6(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity6_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline bndr_obj_1_3_4_5_6(const bndr_obj_1_3_4_5_6& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity6_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class bndr_obj_1_2_4_5_6 : public arity1opmf, private arity6_mf { public: explicit inline bndr_obj_1_2_4_5_6(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : arity1opmf(oi, reinterpret_cast(f.pmf0)), arity6_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {} inline bndr_obj_1_2_4_5_6(const bndr_obj_1_2_4_5_6& bndri) : arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), arity6_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; // Template Classes for binding const obj&pmf Ref of arity 6 to arity 1 template class bndr_const_obj_2_3_4_5_6 : public arity1opmf_const, private arity6_const_mf { public: explicit inline bndr_const_obj_2_3_4_5_6(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity6_const_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline bndr_const_obj_2_3_4_5_6(const bndr_const_obj_2_3_4_5_6& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity6_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class bndr_const_obj_1_3_4_5_6 : public arity1opmf_const, private arity6_const_mf { public: explicit inline bndr_const_obj_1_3_4_5_6(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity6_const_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline bndr_const_obj_1_3_4_5_6(const bndr_const_obj_1_3_4_5_6& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity6_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class bndr_const_obj_1_2_4_5_6 : public arity1opmf_const, private arity6_const_mf { public: explicit inline bndr_const_obj_1_2_4_5_6(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : arity1opmf_const(oi, reinterpret_cast(f.pmf0)), arity6_const_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {} inline bndr_const_obj_1_2_4_5_6(const bndr_const_obj_1_2_4_5_6& bndri) : arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), arity6_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; // Template Functions for binding arity 6 to arity 1 // Template Functions for binding pmf of arity 6 to arity 1 template inline bndr_mf_2_3_4_5_6 bind_mf_2_3_4_5_6(const Function &f, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { return bndr_mf_2_3_4_5_6(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline bndr_mf_1_3_4_5_6 bind_mf_1_3_4_5_6(const Function &f, A1 a1, A3 a3, A4 a4, A5 a5, A6 a6) { return bndr_mf_1_3_4_5_6(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline bndr_mf_1_2_4_5_6 bind_mf_1_2_4_5_6(const Function &f, A1 a1, A2 a2, A4 a4, A5 a5, A6 a6) { return bndr_mf_1_2_4_5_6(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; // Template Functions for binding const pmf of arity 6 to arity 1 template inline bndr_const_mf_2_3_4_5_6 bind_const_mf_2_3_4_5_6(const Function &f, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { return bndr_const_mf_2_3_4_5_6(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline bndr_const_mf_1_3_4_5_6 bind_const_mf_1_3_4_5_6(const Function &f, A1 a1, A3 a3, A4 a4, A5 a5, A6 a6) { return bndr_const_mf_1_3_4_5_6(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline bndr_const_mf_1_2_4_5_6 bind_const_mf_1_2_4_5_6(const Function &f, A1 a1, A2 a2, A4 a4, A5 a5, A6 a6) { return bndr_const_mf_1_2_4_5_6(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; // Template Functions for binding obj&pmf Ref of arity 6 to arity 1 template inline bndr_obj_2_3_4_5_6 bind_obj_2_3_4_5_6(Object& oi, const Function &f, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { return bndr_obj_2_3_4_5_6(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline bndr_obj_1_3_4_5_6 bind_obj_1_3_4_5_6(Object& oi, const Function &f, A1 a1, A3 a3, A4 a4, A5 a5, A6 a6) { return bndr_obj_1_3_4_5_6(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline bndr_obj_1_2_4_5_6 bind_obj_1_2_4_5_6(Object& oi, const Function &f, A1 a1, A2 a2, A4 a4, A5 a5, A6 a6) { return bndr_obj_1_2_4_5_6(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; // Template Functions for binding const obj&pmf Ref of arity 6 to arity 1 template inline bndr_const_obj_2_3_4_5_6 bind_const_obj_2_3_4_5_6(const Object& oi, const Function &f, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { return bndr_const_obj_2_3_4_5_6(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline bndr_const_obj_1_3_4_5_6 bind_const_obj_1_3_4_5_6(const Object& oi, const Function &f, A1 a1, A3 a3, A4 a4, A5 a5, A6 a6) { return bndr_const_obj_1_3_4_5_6(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline bndr_const_obj_1_2_4_5_6 bind_const_obj_1_2_4_5_6(const Object& oi, const Function &f, A1 a1, A2 a2, A4 a4, A5 a5, A6 a6) { return bndr_const_obj_1_2_4_5_6(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; // // binders for arity 2 // // Template Classes for binding arity 2 to arity 1 // Template Classes for binding function ptrs of arity 2 to arity 1 template class std_bndr_2 : public std_arity1fp { public: typedef typename Function::result_type ( __stdcall *const pf2type) (typename Function::first_argument_type, typename Function::second_argument_type); explicit inline std_bndr_2(const Function &f, typename Function::second_argument_type a2) : std_arity1fp(reinterpret_cast(f.pf0)), arg2val(a2) {} inline std_bndr_2(const std_bndr_2& bndri) : std_arity1fp(reinterpret_cast(bndri.pf0)), arg2val(bndri.arg2val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pf2type pf = reinterpret_cast(pf0); return pf(a1, arg2val); } public: typename Function::second_argument_type arg2val; }; template class std_bndr_1 : public std_arity1fp { public: typedef typename Function::result_type ( __stdcall *const pf2type) (typename Function::first_argument_type, typename Function::second_argument_type); explicit inline std_bndr_1(const Function &f, typename Function::first_argument_type a1) : std_arity1fp(reinterpret_cast(f.pf0)), arg1val(a1) {} inline std_bndr_1(const std_bndr_1& bndri) : std_arity1fp(reinterpret_cast(bndri.pf0)), arg1val(bndri.arg1val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pf2type pf = reinterpret_cast(pf0); return pf(arg1val, a2); } public: typename Function::first_argument_type arg1val; }; // Template Classes for binding pmf of arity 2 to arity 1 template class std_bndr_mf_2 : public std_arity1pmf, private std_arity2_mf { public: explicit inline std_bndr_mf_2(const Function &f, typename Function::second_argument_type a2) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity2_mf(f), arg2val(a2) {} inline std_bndr_mf_2(const std_bndr_mf_2& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity2_mf(bndri), arg2val(bndri.arg2val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf2type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val); } public: typename Function::second_argument_type arg2val; }; template class std_bndr_mf_1 : public std_arity1pmf, private std_arity2_mf { public: explicit inline std_bndr_mf_1(const Function &f, typename Function::first_argument_type a1) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity2_mf(f), arg1val(a1) {} inline std_bndr_mf_1(const std_bndr_mf_1& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity2_mf(bndri), arg1val(bndri.arg1val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2); } public: typename Function::first_argument_type arg1val; }; // Template Classes for binding const pmf of arity 2 to arity 1 template class std_bndr_const_mf_2 : public std_arity1pmf_const, private std_arity2_const_mf { public: explicit inline std_bndr_const_mf_2(const Function &f, typename Function::second_argument_type a2) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity2_const_mf(f), arg2val(a2) {} inline std_bndr_const_mf_2(const std_bndr_const_mf_2& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity2_const_mf(bndri), arg2val(bndri.arg2val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf2type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val); } public: typename Function::second_argument_type arg2val; }; template class std_bndr_const_mf_1 : public std_arity1pmf_const, private std_arity2_const_mf { public: explicit inline std_bndr_const_mf_1(const Function &f, typename Function::first_argument_type a1) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity2_const_mf(f), arg1val(a1) {} inline std_bndr_const_mf_1(const std_bndr_const_mf_1& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity2_const_mf(bndri), arg1val(bndri.arg1val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2); } public: typename Function::first_argument_type arg1val; }; // Template Classes for binding obj&pmf Ref of arity 2 to arity 1 template class std_bndr_obj_2 : public std_arity1opmf, private std_arity2_mf { public: explicit inline std_bndr_obj_2(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity2_mf(f), arg2val(a2) {} inline std_bndr_obj_2(const std_bndr_obj_2& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity2_mf(bndri), arg2val(bndri.arg2val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf2type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val); } public: typename Function::second_argument_type arg2val; }; template class std_bndr_obj_1 : public std_arity1opmf, private std_arity2_mf { public: explicit inline std_bndr_obj_1(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity2_mf(f), arg1val(a1) {} inline std_bndr_obj_1(const std_bndr_obj_1& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity2_mf(bndri), arg1val(bndri.arg1val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2); } public: typename Function::first_argument_type arg1val; }; // Template Classes for binding const obj&pmf Ref of arity 2 to arity 1 template class std_bndr_const_obj_2 : public std_arity1opmf_const, private std_arity2_const_mf { public: explicit inline std_bndr_const_obj_2(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity2_const_mf(f), arg2val(a2) {} inline std_bndr_const_obj_2(const std_bndr_const_obj_2& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity2_const_mf(bndri), arg2val(bndri.arg2val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf2type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val); } public: typename Function::second_argument_type arg2val; }; template class std_bndr_const_obj_1 : public std_arity1opmf_const, private std_arity2_const_mf { public: explicit inline std_bndr_const_obj_1(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity2_const_mf(f), arg1val(a1) {} inline std_bndr_const_obj_1(const std_bndr_const_obj_1& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity2_const_mf(bndri), arg1val(bndri.arg1val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf2type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2); } public: typename Function::first_argument_type arg1val; }; // Template Functions for binding arity 2 to arity 1 // Template Functions for binding function ptrs of arity 2 to arity 1 template inline std_bndr_2 std_bind_fp_2(const Function &f, A2 a2) { return std_bndr_2(f, typename Function::second_argument_type(a2)); }; template inline std_bndr_1 std_bind_fp_1(const Function &f, A1 a1) { return std_bndr_1(f, typename Function::first_argument_type(a1)); }; // Template Functions for binding pmf of arity 2 to arity 1 template inline std_bndr_mf_2 std_bind_mf_2(const Function &f, A2 a2) { return std_bndr_mf_2(f, typename Function::second_argument_type(a2)); }; template inline std_bndr_mf_1 std_bind_mf_1(const Function &f, A1 a1) { return std_bndr_mf_1(f, typename Function::first_argument_type(a1)); }; // Template Functions for binding const pmf of arity 2 to arity 1 template inline std_bndr_const_mf_2 std_bind_const_mf_2(const Function &f, A2 a2) { return std_bndr_const_mf_2(f, typename Function::second_argument_type(a2)); }; template inline std_bndr_const_mf_1 std_bind_const_mf_1(const Function &f, A1 a1) { return std_bndr_const_mf_1(f, typename Function::first_argument_type(a1)); }; // Template Functions for binding obj&pmf Ref of arity 2 to arity 1 template inline std_bndr_obj_2 std_bind_obj_2(Object& oi, const Function &f, A2 a2) { return std_bndr_obj_2(static_cast(oi), f, typename Function::second_argument_type(a2)); }; template inline std_bndr_obj_1 std_bind_obj_1(Object& oi, const Function &f, A1 a1) { return std_bndr_obj_1(static_cast(oi), f, typename Function::first_argument_type(a1)); }; // Template Functions for binding const obj&pmf Ref of arity 2 to arity 1 template inline std_bndr_const_obj_2 std_bind_const_obj_2(const Object& oi, const Function &f, A2 a2) { return std_bndr_const_obj_2(static_cast(oi), f, typename Function::second_argument_type(a2)); }; template inline std_bndr_const_obj_1 std_bind_const_obj_1(const Object& oi, const Function &f, A1 a1) { return std_bndr_const_obj_1(static_cast(oi), f, typename Function::first_argument_type(a1)); }; // // binders for arity 3 // // Template Classes for binding arity 3 to arity 1 // Template Classes for binding function ptrs of arity 3 to arity 1 template class std_bndr_2_3 : public std_arity1fp { public: typedef typename Function::result_type ( __stdcall *const pf3type) (typename Function::first_argument_type, typename Function::second_argument_type, typename Function::argument_3_type); explicit inline std_bndr_2_3(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) : std_arity1fp(reinterpret_cast(f.pf0)), arg2val(a2), arg3val(a3) {} inline std_bndr_2_3(const std_bndr_2_3& bndri) : std_arity1fp(reinterpret_cast(bndri.pf0)), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pf3type pf = reinterpret_cast(pf0); return pf(a1, arg2val, arg3val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; }; template class std_bndr_1_3 : public std_arity1fp { public: typedef typename Function::result_type ( __stdcall *const pf3type) (typename Function::first_argument_type, typename Function::second_argument_type, typename Function::argument_3_type); explicit inline std_bndr_1_3(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) : std_arity1fp(reinterpret_cast(f.pf0)), arg1val(a1), arg3val(a3) {} inline std_bndr_1_3(const std_bndr_1_3& bndri) : std_arity1fp(reinterpret_cast(bndri.pf0)), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pf3type pf = reinterpret_cast(pf0); return pf(arg1val, a2, arg3val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; }; template class std_bndr_1_2 : public std_arity1fp { public: typedef typename Function::result_type ( __stdcall *const pf3type) (typename Function::first_argument_type, typename Function::second_argument_type, typename Function::argument_3_type); explicit inline std_bndr_1_2(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) : std_arity1fp(reinterpret_cast(f.pf0)), arg1val(a1), arg2val(a2) {} inline std_bndr_1_2(const std_bndr_1_2& bndri) : std_arity1fp(reinterpret_cast(bndri.pf0)), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pf3type pf = reinterpret_cast(pf0); return pf(arg1val, arg2val, a3); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; }; // Template Classes for binding pmf of arity 3 to arity 1 template class std_bndr_mf_2_3 : public std_arity1pmf, private std_arity3_mf { public: explicit inline std_bndr_mf_2_3(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity3_mf(f), arg2val(a2), arg3val(a3) {} inline std_bndr_mf_2_3(const std_bndr_mf_2_3& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity3_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; }; template class std_bndr_mf_1_3 : public std_arity1pmf, private std_arity3_mf { public: explicit inline std_bndr_mf_1_3(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity3_mf(f), arg1val(a1), arg3val(a3) {} inline std_bndr_mf_1_3(const std_bndr_mf_1_3& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity3_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; }; template class std_bndr_mf_1_2 : public std_arity1pmf, private std_arity3_mf { public: explicit inline std_bndr_mf_1_2(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity3_mf(f), arg1val(a1), arg2val(a2) {} inline std_bndr_mf_1_2(const std_bndr_mf_1_2& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity3_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; }; // Template Classes for binding const pmf of arity 3 to arity 1 template class std_bndr_const_mf_2_3 : public std_arity1pmf_const, private std_arity3_const_mf { public: explicit inline std_bndr_const_mf_2_3(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity3_const_mf(f), arg2val(a2), arg3val(a3) {} inline std_bndr_const_mf_2_3(const std_bndr_const_mf_2_3& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity3_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; }; template class std_bndr_const_mf_1_3 : public std_arity1pmf_const, private std_arity3_const_mf { public: explicit inline std_bndr_const_mf_1_3(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity3_const_mf(f), arg1val(a1), arg3val(a3) {} inline std_bndr_const_mf_1_3(const std_bndr_const_mf_1_3& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity3_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; }; template class std_bndr_const_mf_1_2 : public std_arity1pmf_const, private std_arity3_const_mf { public: explicit inline std_bndr_const_mf_1_2(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity3_const_mf(f), arg1val(a1), arg2val(a2) {} inline std_bndr_const_mf_1_2(const std_bndr_const_mf_1_2& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity3_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; }; // Template Classes for binding obj&pmf Ref of arity 3 to arity 1 template class std_bndr_obj_2_3 : public std_arity1opmf, private std_arity3_mf { public: explicit inline std_bndr_obj_2_3(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity3_mf(f), arg2val(a2), arg3val(a3) {} inline std_bndr_obj_2_3(const std_bndr_obj_2_3& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity3_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; }; template class std_bndr_obj_1_3 : public std_arity1opmf, private std_arity3_mf { public: explicit inline std_bndr_obj_1_3(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity3_mf(f), arg1val(a1), arg3val(a3) {} inline std_bndr_obj_1_3(const std_bndr_obj_1_3& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity3_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; }; template class std_bndr_obj_1_2 : public std_arity1opmf, private std_arity3_mf { public: explicit inline std_bndr_obj_1_2(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity3_mf(f), arg1val(a1), arg2val(a2) {} inline std_bndr_obj_1_2(const std_bndr_obj_1_2& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity3_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; }; // Template Classes for binding const obj&pmf Ref of arity 3 to arity 1 template class std_bndr_const_obj_2_3 : public std_arity1opmf_const, private std_arity3_const_mf { public: explicit inline std_bndr_const_obj_2_3(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity3_const_mf(f), arg2val(a2), arg3val(a3) {} inline std_bndr_const_obj_2_3(const std_bndr_const_obj_2_3& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity3_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; }; template class std_bndr_const_obj_1_3 : public std_arity1opmf_const, private std_arity3_const_mf { public: explicit inline std_bndr_const_obj_1_3(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity3_const_mf(f), arg1val(a1), arg3val(a3) {} inline std_bndr_const_obj_1_3(const std_bndr_const_obj_1_3& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity3_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; }; template class std_bndr_const_obj_1_2 : public std_arity1opmf_const, private std_arity3_const_mf { public: explicit inline std_bndr_const_obj_1_2(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity3_const_mf(f), arg1val(a1), arg2val(a2) {} inline std_bndr_const_obj_1_2(const std_bndr_const_obj_1_2& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity3_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf3type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; }; // Template Functions for binding arity 3 to arity 1 // Template Functions for binding function ptrs of arity 3 to arity 1 template inline std_bndr_2_3 std_bind_fp_2_3(const Function &f, A2 a2, A3 a3) { return std_bndr_2_3(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3)); }; template inline std_bndr_1_3 std_bind_fp_1_3(const Function &f, A1 a1, A3 a3) { return std_bndr_1_3(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3)); }; template inline std_bndr_1_2 std_bind_fp_1_2(const Function &f, A1 a1, A2 a2) { return std_bndr_1_2(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2)); }; // Template Functions for binding pmf of arity 3 to arity 1 template inline std_bndr_mf_2_3 std_bind_mf_2_3(const Function &f, A2 a2, A3 a3) { return std_bndr_mf_2_3(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3)); }; template inline std_bndr_mf_1_3 std_bind_mf_1_3(const Function &f, A1 a1, A3 a3) { return std_bndr_mf_1_3(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3)); }; template inline std_bndr_mf_1_2 std_bind_mf_1_2(const Function &f, A1 a1, A2 a2) { return std_bndr_mf_1_2(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2)); }; // Template Functions for binding const pmf of arity 3 to arity 1 template inline std_bndr_const_mf_2_3 std_bind_const_mf_2_3(const Function &f, A2 a2, A3 a3) { return std_bndr_const_mf_2_3(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3)); }; template inline std_bndr_const_mf_1_3 std_bind_const_mf_1_3(const Function &f, A1 a1, A3 a3) { return std_bndr_const_mf_1_3(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3)); }; template inline std_bndr_const_mf_1_2 std_bind_const_mf_1_2(const Function &f, A1 a1, A2 a2) { return std_bndr_const_mf_1_2(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2)); }; // Template Functions for binding obj&pmf Ref of arity 3 to arity 1 template inline std_bndr_obj_2_3 std_bind_obj_2_3(Object& oi, const Function &f, A2 a2, A3 a3) { return std_bndr_obj_2_3(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3)); }; template inline std_bndr_obj_1_3 std_bind_obj_1_3(Object& oi, const Function &f, A1 a1, A3 a3) { return std_bndr_obj_1_3(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3)); }; template inline std_bndr_obj_1_2 std_bind_obj_1_2(Object& oi, const Function &f, A1 a1, A2 a2) { return std_bndr_obj_1_2(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2)); }; // Template Functions for binding const obj&pmf Ref of arity 3 to arity 1 template inline std_bndr_const_obj_2_3 std_bind_const_obj_2_3(const Object& oi, const Function &f, A2 a2, A3 a3) { return std_bndr_const_obj_2_3(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3)); }; template inline std_bndr_const_obj_1_3 std_bind_const_obj_1_3(const Object& oi, const Function &f, A1 a1, A3 a3) { return std_bndr_const_obj_1_3(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3)); }; template inline std_bndr_const_obj_1_2 std_bind_const_obj_1_2(const Object& oi, const Function &f, A1 a1, A2 a2) { return std_bndr_const_obj_1_2(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2)); }; // // binders for arity 4 // // Template Classes for binding arity 4 to arity 1 // Template Classes for binding pmf of arity 4 to arity 1 template class std_bndr_mf_2_3_4 : public std_arity1pmf, private std_arity4_mf { public: explicit inline std_bndr_mf_2_3_4(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity4_mf(f), arg2val(a2), arg3val(a3), arg4val(a4) {} inline std_bndr_mf_2_3_4(const std_bndr_mf_2_3_4& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity4_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class std_bndr_mf_1_3_4 : public std_arity1pmf, private std_arity4_mf { public: explicit inline std_bndr_mf_1_3_4(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity4_mf(f), arg1val(a1), arg3val(a3), arg4val(a4) {} inline std_bndr_mf_1_3_4(const std_bndr_mf_1_3_4& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity4_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class std_bndr_mf_1_2_4 : public std_arity1pmf, private std_arity4_mf { public: explicit inline std_bndr_mf_1_2_4(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity4_mf(f), arg1val(a1), arg2val(a2), arg4val(a4) {} inline std_bndr_mf_1_2_4(const std_bndr_mf_1_2_4& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity4_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; }; // Template Classes for binding const pmf of arity 4 to arity 1 template class std_bndr_const_mf_2_3_4 : public std_arity1pmf_const, private std_arity4_const_mf { public: explicit inline std_bndr_const_mf_2_3_4(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity4_const_mf(f), arg2val(a2), arg3val(a3), arg4val(a4) {} inline std_bndr_const_mf_2_3_4(const std_bndr_const_mf_2_3_4& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity4_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class std_bndr_const_mf_1_3_4 : public std_arity1pmf_const, private std_arity4_const_mf { public: explicit inline std_bndr_const_mf_1_3_4(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity4_const_mf(f), arg1val(a1), arg3val(a3), arg4val(a4) {} inline std_bndr_const_mf_1_3_4(const std_bndr_const_mf_1_3_4& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity4_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class std_bndr_const_mf_1_2_4 : public std_arity1pmf_const, private std_arity4_const_mf { public: explicit inline std_bndr_const_mf_1_2_4(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity4_const_mf(f), arg1val(a1), arg2val(a2), arg4val(a4) {} inline std_bndr_const_mf_1_2_4(const std_bndr_const_mf_1_2_4& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity4_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf4type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; }; // Template Classes for binding obj&pmf Ref of arity 4 to arity 1 template class std_bndr_obj_2_3_4 : public std_arity1opmf, private std_arity4_mf { public: explicit inline std_bndr_obj_2_3_4(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity4_mf(f), arg2val(a2), arg3val(a3), arg4val(a4) {} inline std_bndr_obj_2_3_4(const std_bndr_obj_2_3_4& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity4_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class std_bndr_obj_1_3_4 : public std_arity1opmf, private std_arity4_mf { public: explicit inline std_bndr_obj_1_3_4(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity4_mf(f), arg1val(a1), arg3val(a3), arg4val(a4) {} inline std_bndr_obj_1_3_4(const std_bndr_obj_1_3_4& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity4_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class std_bndr_obj_1_2_4 : public std_arity1opmf, private std_arity4_mf { public: explicit inline std_bndr_obj_1_2_4(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity4_mf(f), arg1val(a1), arg2val(a2), arg4val(a4) {} inline std_bndr_obj_1_2_4(const std_bndr_obj_1_2_4& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity4_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; }; // Template Classes for binding const obj&pmf Ref of arity 4 to arity 1 template class std_bndr_const_obj_2_3_4 : public std_arity1opmf_const, private std_arity4_const_mf { public: explicit inline std_bndr_const_obj_2_3_4(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity4_const_mf(f), arg2val(a2), arg3val(a3), arg4val(a4) {} inline std_bndr_const_obj_2_3_4(const std_bndr_const_obj_2_3_4& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity4_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class std_bndr_const_obj_1_3_4 : public std_arity1opmf_const, private std_arity4_const_mf { public: explicit inline std_bndr_const_obj_1_3_4(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity4_const_mf(f), arg1val(a1), arg3val(a3), arg4val(a4) {} inline std_bndr_const_obj_1_3_4(const std_bndr_const_obj_1_3_4& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity4_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; }; template class std_bndr_const_obj_1_2_4 : public std_arity1opmf_const, private std_arity4_const_mf { public: explicit inline std_bndr_const_obj_1_2_4(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity4_const_mf(f), arg1val(a1), arg2val(a2), arg4val(a4) {} inline std_bndr_const_obj_1_2_4(const std_bndr_const_obj_1_2_4& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity4_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf4type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; }; // Template Functions for binding arity 4 to arity 1 // Template Functions for binding pmf of arity 4 to arity 1 template inline std_bndr_mf_2_3_4 std_bind_mf_2_3_4(const Function &f, A2 a2, A3 a3, A4 a4) { return std_bndr_mf_2_3_4(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline std_bndr_mf_1_3_4 std_bind_mf_1_3_4(const Function &f, A1 a1, A3 a3, A4 a4) { return std_bndr_mf_1_3_4(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline std_bndr_mf_1_2_4 std_bind_mf_1_2_4(const Function &f, A1 a1, A2 a2, A4 a4) { return std_bndr_mf_1_2_4(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4)); }; // Template Functions for binding const pmf of arity 4 to arity 1 template inline std_bndr_const_mf_2_3_4 std_bind_const_mf_2_3_4(const Function &f, A2 a2, A3 a3, A4 a4) { return std_bndr_const_mf_2_3_4(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline std_bndr_const_mf_1_3_4 std_bind_const_mf_1_3_4(const Function &f, A1 a1, A3 a3, A4 a4) { return std_bndr_const_mf_1_3_4(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline std_bndr_const_mf_1_2_4 std_bind_const_mf_1_2_4(const Function &f, A1 a1, A2 a2, A4 a4) { return std_bndr_const_mf_1_2_4(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4)); }; // Template Functions for binding obj&pmf Ref of arity 4 to arity 1 template inline std_bndr_obj_2_3_4 std_bind_obj_2_3_4(Object& oi, const Function &f, A2 a2, A3 a3, A4 a4) { return std_bndr_obj_2_3_4(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline std_bndr_obj_1_3_4 std_bind_obj_1_3_4(Object& oi, const Function &f, A1 a1, A3 a3, A4 a4) { return std_bndr_obj_1_3_4(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline std_bndr_obj_1_2_4 std_bind_obj_1_2_4(Object& oi, const Function &f, A1 a1, A2 a2, A4 a4) { return std_bndr_obj_1_2_4(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4)); }; // Template Functions for binding const obj&pmf Ref of arity 4 to arity 1 template inline std_bndr_const_obj_2_3_4 std_bind_const_obj_2_3_4(const Object& oi, const Function &f, A2 a2, A3 a3, A4 a4) { return std_bndr_const_obj_2_3_4(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline std_bndr_const_obj_1_3_4 std_bind_const_obj_1_3_4(const Object& oi, const Function &f, A1 a1, A3 a3, A4 a4) { return std_bndr_const_obj_1_3_4(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4)); }; template inline std_bndr_const_obj_1_2_4 std_bind_const_obj_1_2_4(const Object& oi, const Function &f, A1 a1, A2 a2, A4 a4) { return std_bndr_const_obj_1_2_4(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4)); }; // // binders for arity 5 // // Template Classes for binding arity 5 to arity 1 // Template Classes for binding pmf of arity 5 to arity 1 template class std_bndr_mf_2_3_4_5 : public std_arity1pmf, private std_arity5_mf { public: explicit inline std_bndr_mf_2_3_4_5(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity5_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {} inline std_bndr_mf_2_3_4_5(const std_bndr_mf_2_3_4_5& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity5_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class std_bndr_mf_1_3_4_5 : public std_arity1pmf, private std_arity5_mf { public: explicit inline std_bndr_mf_1_3_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity5_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {} inline std_bndr_mf_1_3_4_5(const std_bndr_mf_1_3_4_5& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity5_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class std_bndr_mf_1_2_4_5 : public std_arity1pmf, private std_arity5_mf { public: explicit inline std_bndr_mf_1_2_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity5_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {} inline std_bndr_mf_1_2_4_5(const std_bndr_mf_1_2_4_5& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity5_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; // Template Classes for binding const pmf of arity 5 to arity 1 template class std_bndr_const_mf_2_3_4_5 : public std_arity1pmf_const, private std_arity5_const_mf { public: explicit inline std_bndr_const_mf_2_3_4_5(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity5_const_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {} inline std_bndr_const_mf_2_3_4_5(const std_bndr_const_mf_2_3_4_5& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity5_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class std_bndr_const_mf_1_3_4_5 : public std_arity1pmf_const, private std_arity5_const_mf { public: explicit inline std_bndr_const_mf_1_3_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity5_const_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {} inline std_bndr_const_mf_1_3_4_5(const std_bndr_const_mf_1_3_4_5& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity5_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class std_bndr_const_mf_1_2_4_5 : public std_arity1pmf_const, private std_arity5_const_mf { public: explicit inline std_bndr_const_mf_1_2_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity5_const_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {} inline std_bndr_const_mf_1_2_4_5(const std_bndr_const_mf_1_2_4_5& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity5_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf5type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; // Template Classes for binding obj&pmf Ref of arity 5 to arity 1 template class std_bndr_obj_2_3_4_5 : public std_arity1opmf, private std_arity5_mf { public: explicit inline std_bndr_obj_2_3_4_5(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity5_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {} inline std_bndr_obj_2_3_4_5(const std_bndr_obj_2_3_4_5& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity5_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class std_bndr_obj_1_3_4_5 : public std_arity1opmf, private std_arity5_mf { public: explicit inline std_bndr_obj_1_3_4_5(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity5_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {} inline std_bndr_obj_1_3_4_5(const std_bndr_obj_1_3_4_5& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity5_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class std_bndr_obj_1_2_4_5 : public std_arity1opmf, private std_arity5_mf { public: explicit inline std_bndr_obj_1_2_4_5(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity5_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {} inline std_bndr_obj_1_2_4_5(const std_bndr_obj_1_2_4_5& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity5_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; // Template Classes for binding const obj&pmf Ref of arity 5 to arity 1 template class std_bndr_const_obj_2_3_4_5 : public std_arity1opmf_const, private std_arity5_const_mf { public: explicit inline std_bndr_const_obj_2_3_4_5(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity5_const_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {} inline std_bndr_const_obj_2_3_4_5(const std_bndr_const_obj_2_3_4_5& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity5_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class std_bndr_const_obj_1_3_4_5 : public std_arity1opmf_const, private std_arity5_const_mf { public: explicit inline std_bndr_const_obj_1_3_4_5(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity5_const_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {} inline std_bndr_const_obj_1_3_4_5(const std_bndr_const_obj_1_3_4_5& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity5_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; template class std_bndr_const_obj_1_2_4_5 : public std_arity1opmf_const, private std_arity5_const_mf { public: explicit inline std_bndr_const_obj_1_2_4_5(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity5_const_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {} inline std_bndr_const_obj_1_2_4_5(const std_bndr_const_obj_1_2_4_5& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity5_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf5type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; }; // Template Functions for binding arity 5 to arity 1 // Template Functions for binding pmf of arity 5 to arity 1 template inline std_bndr_mf_2_3_4_5 std_bind_mf_2_3_4_5(const Function &f, A2 a2, A3 a3, A4 a4, A5 a5) { return std_bndr_mf_2_3_4_5(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline std_bndr_mf_1_3_4_5 std_bind_mf_1_3_4_5(const Function &f, A1 a1, A3 a3, A4 a4, A5 a5) { return std_bndr_mf_1_3_4_5(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline std_bndr_mf_1_2_4_5 std_bind_mf_1_2_4_5(const Function &f, A1 a1, A2 a2, A4 a4, A5 a5) { return std_bndr_mf_1_2_4_5(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; // Template Functions for binding const pmf of arity 5 to arity 1 template inline std_bndr_const_mf_2_3_4_5 std_bind_const_mf_2_3_4_5(const Function &f, A2 a2, A3 a3, A4 a4, A5 a5) { return std_bndr_const_mf_2_3_4_5(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline std_bndr_const_mf_1_3_4_5 std_bind_const_mf_1_3_4_5(const Function &f, A1 a1, A3 a3, A4 a4, A5 a5) { return std_bndr_const_mf_1_3_4_5(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline std_bndr_const_mf_1_2_4_5 std_bind_const_mf_1_2_4_5(const Function &f, A1 a1, A2 a2, A4 a4, A5 a5) { return std_bndr_const_mf_1_2_4_5(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; // Template Functions for binding obj&pmf Ref of arity 5 to arity 1 template inline std_bndr_obj_2_3_4_5 std_bind_obj_2_3_4_5(Object& oi, const Function &f, A2 a2, A3 a3, A4 a4, A5 a5) { return std_bndr_obj_2_3_4_5(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline std_bndr_obj_1_3_4_5 std_bind_obj_1_3_4_5(Object& oi, const Function &f, A1 a1, A3 a3, A4 a4, A5 a5) { return std_bndr_obj_1_3_4_5(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline std_bndr_obj_1_2_4_5 std_bind_obj_1_2_4_5(Object& oi, const Function &f, A1 a1, A2 a2, A4 a4, A5 a5) { return std_bndr_obj_1_2_4_5(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; // Template Functions for binding const obj&pmf Ref of arity 5 to arity 1 template inline std_bndr_const_obj_2_3_4_5 std_bind_const_obj_2_3_4_5(const Object& oi, const Function &f, A2 a2, A3 a3, A4 a4, A5 a5) { return std_bndr_const_obj_2_3_4_5(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline std_bndr_const_obj_1_3_4_5 std_bind_const_obj_1_3_4_5(const Object& oi, const Function &f, A1 a1, A3 a3, A4 a4, A5 a5) { return std_bndr_const_obj_1_3_4_5(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; template inline std_bndr_const_obj_1_2_4_5 std_bind_const_obj_1_2_4_5(const Object& oi, const Function &f, A1 a1, A2 a2, A4 a4, A5 a5) { return std_bndr_const_obj_1_2_4_5(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5)); }; // // binders for arity 6 // // Template Classes for binding arity 6 to arity 1 // Template Classes for binding pmf of arity 6 to arity 1 template class std_bndr_mf_2_3_4_5_6 : public std_arity1pmf, private std_arity6_mf { public: explicit inline std_bndr_mf_2_3_4_5_6(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity6_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline std_bndr_mf_2_3_4_5_6(const std_bndr_mf_2_3_4_5_6& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity6_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class std_bndr_mf_1_3_4_5_6 : public std_arity1pmf, private std_arity6_mf { public: explicit inline std_bndr_mf_1_3_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity6_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline std_bndr_mf_1_3_4_5_6(const std_bndr_mf_1_3_4_5_6& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity6_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class std_bndr_mf_1_2_4_5_6 : public std_arity1pmf, private std_arity6_mf { public: explicit inline std_bndr_mf_1_2_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity6_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {} inline std_bndr_mf_1_2_4_5_6(const std_bndr_mf_1_2_4_5_6& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity6_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; // Template Classes for binding const pmf of arity 6 to arity 1 template class std_bndr_const_mf_2_3_4_5_6 : public std_arity1pmf_const, private std_arity6_const_mf { public: explicit inline std_bndr_const_mf_2_3_4_5_6(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity6_const_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline std_bndr_const_mf_2_3_4_5_6(const std_bndr_const_mf_2_3_4_5_6& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity6_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class std_bndr_const_mf_1_3_4_5_6 : public std_arity1pmf_const, private std_arity6_const_mf { public: explicit inline std_bndr_const_mf_1_3_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity6_const_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline std_bndr_const_mf_1_3_4_5_6(const std_bndr_const_mf_1_3_4_5_6& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity6_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class std_bndr_const_mf_1_2_4_5_6 : public std_arity1pmf_const, private std_arity6_const_mf { public: explicit inline std_bndr_const_mf_1_2_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : std_arity1pmf_const(reinterpret_cast(f.pmf0)), std_arity6_const_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {} inline std_bndr_const_mf_1_2_4_5_6(const std_bndr_const_mf_1_2_4_5_6& bndri) : std_arity1pmf_const(reinterpret_cast(bndri.pmf0)), std_arity6_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf6type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; // Template Classes for binding obj&pmf Ref of arity 6 to arity 1 template class std_bndr_obj_2_3_4_5_6 : public std_arity1opmf, private std_arity6_mf { public: explicit inline std_bndr_obj_2_3_4_5_6(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity6_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline std_bndr_obj_2_3_4_5_6(const std_bndr_obj_2_3_4_5_6& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity6_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class std_bndr_obj_1_3_4_5_6 : public std_arity1opmf, private std_arity6_mf { public: explicit inline std_bndr_obj_1_3_4_5_6(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity6_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline std_bndr_obj_1_3_4_5_6(const std_bndr_obj_1_3_4_5_6& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity6_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class std_bndr_obj_1_2_4_5_6 : public std_arity1opmf, private std_arity6_mf { public: explicit inline std_bndr_obj_1_2_4_5_6(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity6_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {} inline std_bndr_obj_1_2_4_5_6(const std_bndr_obj_1_2_4_5_6& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity6_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; // Template Classes for binding const obj&pmf Ref of arity 6 to arity 1 template class std_bndr_const_obj_2_3_4_5_6 : public std_arity1opmf_const, private std_arity6_const_mf { public: explicit inline std_bndr_const_obj_2_3_4_5_6(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity6_const_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline std_bndr_const_obj_2_3_4_5_6(const std_bndr_const_obj_2_3_4_5_6& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity6_const_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class std_bndr_const_obj_1_3_4_5_6 : public std_arity1opmf_const, private std_arity6_const_mf { public: explicit inline std_bndr_const_obj_1_3_4_5_6(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity6_const_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {} inline std_bndr_const_obj_1_3_4_5_6(const std_bndr_const_obj_1_3_4_5_6& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity6_const_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; template class std_bndr_const_obj_1_2_4_5_6 : public std_arity1opmf_const, private std_arity6_const_mf { public: explicit inline std_bndr_const_obj_1_2_4_5_6(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) : std_arity1opmf_const(oi, reinterpret_cast(f.pmf0)), std_arity6_const_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {} inline std_bndr_const_obj_1_2_4_5_6(const std_bndr_const_obj_1_2_4_5_6& bndri) : std_arity1opmf_const(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity6_const_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf6type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; }; // Template Functions for binding arity 6 to arity 1 // Template Functions for binding pmf of arity 6 to arity 1 template inline std_bndr_mf_2_3_4_5_6 std_bind_mf_2_3_4_5_6(const Function &f, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { return std_bndr_mf_2_3_4_5_6(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline std_bndr_mf_1_3_4_5_6 std_bind_mf_1_3_4_5_6(const Function &f, A1 a1, A3 a3, A4 a4, A5 a5, A6 a6) { return std_bndr_mf_1_3_4_5_6(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline std_bndr_mf_1_2_4_5_6 std_bind_mf_1_2_4_5_6(const Function &f, A1 a1, A2 a2, A4 a4, A5 a5, A6 a6) { return std_bndr_mf_1_2_4_5_6(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; // Template Functions for binding const pmf of arity 6 to arity 1 template inline std_bndr_const_mf_2_3_4_5_6 std_bind_const_mf_2_3_4_5_6(const Function &f, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { return std_bndr_const_mf_2_3_4_5_6(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline std_bndr_const_mf_1_3_4_5_6 std_bind_const_mf_1_3_4_5_6(const Function &f, A1 a1, A3 a3, A4 a4, A5 a5, A6 a6) { return std_bndr_const_mf_1_3_4_5_6(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline std_bndr_const_mf_1_2_4_5_6 std_bind_const_mf_1_2_4_5_6(const Function &f, A1 a1, A2 a2, A4 a4, A5 a5, A6 a6) { return std_bndr_const_mf_1_2_4_5_6(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; // Template Functions for binding obj&pmf Ref of arity 6 to arity 1 template inline std_bndr_obj_2_3_4_5_6 std_bind_obj_2_3_4_5_6(Object& oi, const Function &f, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { return std_bndr_obj_2_3_4_5_6(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline std_bndr_obj_1_3_4_5_6 std_bind_obj_1_3_4_5_6(Object& oi, const Function &f, A1 a1, A3 a3, A4 a4, A5 a5, A6 a6) { return std_bndr_obj_1_3_4_5_6(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline std_bndr_obj_1_2_4_5_6 std_bind_obj_1_2_4_5_6(Object& oi, const Function &f, A1 a1, A2 a2, A4 a4, A5 a5, A6 a6) { return std_bndr_obj_1_2_4_5_6(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; // Template Functions for binding const obj&pmf Ref of arity 6 to arity 1 template inline std_bndr_const_obj_2_3_4_5_6 std_bind_const_obj_2_3_4_5_6(const Object& oi, const Function &f, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { return std_bndr_const_obj_2_3_4_5_6(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline std_bndr_const_obj_1_3_4_5_6 std_bind_const_obj_1_3_4_5_6(const Object& oi, const Function &f, A1 a1, A3 a3, A4 a4, A5 a5, A6 a6) { return std_bndr_const_obj_1_3_4_5_6(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; template inline std_bndr_const_obj_1_2_4_5_6 std_bind_const_obj_1_2_4_5_6(const Object& oi, const Function &f, A1 a1, A2 a2, A4 a4, A5 a5, A6 a6) { return std_bndr_const_obj_1_2_4_5_6(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6)); }; // Template Classes for binding arity 15 to 1 // Template Classes for binding pmf of arity 15 to arity 1 template class std_bndr_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15 : public std_arity1pmf, private std_arity15_mf { public: explicit inline std_bndr_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity15_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6), arg7val(a7), arg8val(a8), arg9val(a9), arg10val(a10), arg11val(a11), arg12val(a12), arg13val(a13), arg14val(a14), arg15val(a15) {} inline std_bndr_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15(const std_bndr_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity15_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val), arg7val(bndri.arg7val), arg8val(bndri.arg8val), arg9val(bndri.arg9val), arg10val(bndri.arg10val), arg11val(bndri.arg11val), arg12val(bndri.arg12val), arg13val(bndri.arg13val), arg14val(bndri.arg14val), arg15val(bndri.arg15val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const { pmf15type pmf = reinterpret_cast(pmf0); return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val, arg7val, arg8val, arg9val, arg10val, arg11val, arg12val, arg13val, arg14val, arg15val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; typename Function::argument_7_type arg7val; typename Function::argument_8_type arg8val; typename Function::argument_9_type arg9val; typename Function::argument_10_type arg10val; typename Function::argument_11_type arg11val; typename Function::argument_12_type arg12val; typename Function::argument_13_type arg13val; typename Function::argument_14_type arg14val; typename Function::argument_15_type arg15val; }; template class std_bndr_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15 : public std_arity1pmf, private std_arity15_mf { public: explicit inline std_bndr_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity15_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6), arg7val(a7), arg8val(a8), arg9val(a9), arg10val(a10), arg11val(a11), arg12val(a12), arg13val(a13), arg14val(a14), arg15val(a15) {} inline std_bndr_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15(const std_bndr_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity15_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val), arg7val(bndri.arg7val), arg8val(bndri.arg8val), arg9val(bndri.arg9val), arg10val(bndri.arg10val), arg11val(bndri.arg11val), arg12val(bndri.arg12val), arg13val(bndri.arg13val), arg14val(bndri.arg14val), arg15val(bndri.arg15val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const { pmf15type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val, arg7val, arg8val, arg9val, arg10val, arg11val, arg12val, arg13val, arg14val, arg15val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; typename Function::argument_7_type arg7val; typename Function::argument_8_type arg8val; typename Function::argument_9_type arg9val; typename Function::argument_10_type arg10val; typename Function::argument_11_type arg11val; typename Function::argument_12_type arg12val; typename Function::argument_13_type arg13val; typename Function::argument_14_type arg14val; typename Function::argument_15_type arg15val; }; template class std_bndr_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15 : public std_arity1pmf, private std_arity15_mf { public: explicit inline std_bndr_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) : std_arity1pmf(reinterpret_cast(f.pmf0)), std_arity15_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6), arg7val(a7), arg8val(a8), arg9val(a9), arg10val(a10), arg11val(a11), arg12val(a12), arg13val(a13), arg14val(a14), arg15val(a15) {} inline std_bndr_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15(const std_bndr_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15& bndri) : std_arity1pmf(reinterpret_cast(bndri.pmf0)), std_arity15_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val), arg7val(bndri.arg7val), arg8val(bndri.arg8val), arg9val(bndri.arg9val), arg10val(bndri.arg10val), arg11val(bndri.arg11val), arg12val(bndri.arg12val), arg13val(bndri.arg13val), arg14val(bndri.arg14val), arg15val(bndri.arg15val) {} inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const { pmf15type pmf = reinterpret_cast(pmf0); return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val, arg7val, arg8val, arg9val, arg10val, arg11val, arg12val, arg13val, arg14val, arg15val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; typename Function::argument_7_type arg7val; typename Function::argument_8_type arg8val; typename Function::argument_9_type arg9val; typename Function::argument_10_type arg10val; typename Function::argument_11_type arg11val; typename Function::argument_12_type arg12val; typename Function::argument_13_type arg13val; typename Function::argument_14_type arg14val; typename Function::argument_15_type arg15val; }; // Template Classes for binding obj&pmf Ref of arity 15 to arity 1 template class std_bndr_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15 : public std_arity1opmf, private std_arity15_mf { public: explicit inline std_bndr_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity15_mf(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6), arg7val(a7), arg8val(a8), arg9val(a9), arg10val(a10), arg11val(a11), arg12val(a12), arg13val(a13), arg14val(a14), arg15val(a15) {} inline std_bndr_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15(const std_bndr_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity15_mf(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val), arg7val(bndri.arg7val), arg8val(bndri.arg8val), arg9val(bndri.arg9val), arg10val(bndri.arg10val), arg11val(bndri.arg11val), arg12val(bndri.arg12val), arg13val(bndri.arg13val), arg14val(bndri.arg14val), arg15val(bndri.arg15val) {} inline typename Function::result_type operator()(typename Function::first_argument_type a1) const { pmf15type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val, arg7val, arg8val, arg9val, arg10val, arg11val, arg12val, arg13val, arg14val, arg15val); } public: typename Function::second_argument_type arg2val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; typename Function::argument_7_type arg7val; typename Function::argument_8_type arg8val; typename Function::argument_9_type arg9val; typename Function::argument_10_type arg10val; typename Function::argument_11_type arg11val; typename Function::argument_12_type arg12val; typename Function::argument_13_type arg13val; typename Function::argument_14_type arg14val; typename Function::argument_15_type arg15val; }; template class std_bndr_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15 : public std_arity1opmf, private std_arity15_mf { public: explicit inline std_bndr_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity15_mf(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6), arg7val(a7), arg8val(a8), arg9val(a9), arg10val(a10), arg11val(a11), arg12val(a12), arg13val(a13), arg14val(a14), arg15val(a15) {} inline std_bndr_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15(const std_bndr_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity15_mf(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val), arg7val(bndri.arg7val), arg8val(bndri.arg8val), arg9val(bndri.arg9val), arg10val(bndri.arg10val), arg11val(bndri.arg11val), arg12val(bndri.arg12val), arg13val(bndri.arg13val), arg14val(bndri.arg14val), arg15val(bndri.arg15val) {} inline typename Function::result_type operator()(typename Function::second_argument_type a2) const { pmf15type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val, arg7val, arg8val, arg9val, arg10val, arg11val, arg12val, arg13val, arg14val, arg15val); } public: typename Function::first_argument_type arg1val; typename Function::argument_3_type arg3val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; typename Function::argument_7_type arg7val; typename Function::argument_8_type arg8val; typename Function::argument_9_type arg9val; typename Function::argument_10_type arg10val; typename Function::argument_11_type arg11val; typename Function::argument_12_type arg12val; typename Function::argument_13_type arg13val; typename Function::argument_14_type arg14val; typename Function::argument_15_type arg15val; }; template class std_bndr_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15 : public std_arity1opmf, private std_arity15_mf { public: explicit inline std_bndr_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) : std_arity1opmf(oi, reinterpret_cast(f.pmf0)), std_arity15_mf(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6), arg7val(a7), arg8val(a8), arg9val(a9), arg10val(a10), arg11val(a11), arg12val(a12), arg13val(a13), arg14val(a14), arg15val(a15) {} inline std_bndr_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15(const std_bndr_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15& bndri) : std_arity1opmf(bndri.objval, reinterpret_cast(bndri.pmf0)), std_arity15_mf(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val), arg7val(bndri.arg7val), arg8val(bndri.arg8val), arg9val(bndri.arg9val), arg10val(bndri.arg10val), arg11val(bndri.arg11val), arg12val(bndri.arg12val), arg13val(bndri.arg13val), arg14val(bndri.arg14val), arg15val(bndri.arg15val) {} inline typename Function::result_type operator()(typename Function::argument_3_type a3) const { pmf15type pmf = reinterpret_cast(pmf0); return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val, arg7val, arg8val, arg9val, arg10val, arg11val, arg12val, arg13val, arg14val, arg15val); } public: typename Function::first_argument_type arg1val; typename Function::second_argument_type arg2val; typename Function::argument_4_type arg4val; typename Function::argument_5_type arg5val; typename Function::argument_6_type arg6val; typename Function::argument_7_type arg7val; typename Function::argument_8_type arg8val; typename Function::argument_9_type arg9val; typename Function::argument_10_type arg10val; typename Function::argument_11_type arg11val; typename Function::argument_12_type arg12val; typename Function::argument_13_type arg13val; typename Function::argument_14_type arg14val; typename Function::argument_15_type arg15val; }; // Template Functions for binding arity 15 to 1 // Template Functions for binding pmf of arity 15 to arity 1 template inline std_bndr_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15 std_bind_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15(const Function &f, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14, A15 a15) { return std_bndr_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6), typename Function::argument_7_type(a7), typename Function::argument_8_type(a8), typename Function::argument_9_type(a9), typename Function::argument_10_type(a10), typename Function::argument_11_type(a11), typename Function::argument_12_type(a12), typename Function::argument_13_type(a13), typename Function::argument_14_type(a14), typename Function::argument_15_type(a15)); }; template inline std_bndr_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15 std_bind_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15(const Function &f, A1 a1, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14, A15 a15) { return std_bndr_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6), typename Function::argument_7_type(a7), typename Function::argument_8_type(a8), typename Function::argument_9_type(a9), typename Function::argument_10_type(a10), typename Function::argument_11_type(a11), typename Function::argument_12_type(a12), typename Function::argument_13_type(a13), typename Function::argument_14_type(a14), typename Function::argument_15_type(a15)); }; template inline std_bndr_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15 std_bind_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15(const Function &f, A1 a1, A2 a2, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14, A15 a15) { return std_bndr_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6), typename Function::argument_7_type(a7), typename Function::argument_8_type(a8), typename Function::argument_9_type(a9), typename Function::argument_10_type(a10), typename Function::argument_11_type(a11), typename Function::argument_12_type(a12), typename Function::argument_13_type(a13), typename Function::argument_14_type(a14), typename Function::argument_15_type(a15)); }; // Template Functions for binding obj&pmf Ref of arity 15 to arity 1 template inline std_bndr_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15 std_bind_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15(Object& oi, const Function &f, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14, A15 a15) { return std_bndr_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15(static_cast(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6), typename Function::argument_7_type(a7), typename Function::argument_8_type(a8), typename Function::argument_9_type(a9), typename Function::argument_10_type(a10), typename Function::argument_11_type(a11), typename Function::argument_12_type(a12), typename Function::argument_13_type(a13), typename Function::argument_14_type(a14), typename Function::argument_15_type(a15)); }; template inline std_bndr_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15 std_bind_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15(Object& oi, const Function &f, A1 a1, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14, A15 a15) { return std_bndr_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6), typename Function::argument_7_type(a7), typename Function::argument_8_type(a8), typename Function::argument_9_type(a9), typename Function::argument_10_type(a10), typename Function::argument_11_type(a11), typename Function::argument_12_type(a12), typename Function::argument_13_type(a13), typename Function::argument_14_type(a14), typename Function::argument_15_type(a15)); }; template inline std_bndr_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15 std_bind_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15(Object& oi, const Function &f, A1 a1, A2 a2, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14, A15 a15) { return std_bndr_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15(static_cast(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6), typename Function::argument_7_type(a7), typename Function::argument_8_type(a8), typename Function::argument_9_type(a9), typename Function::argument_10_type(a10), typename Function::argument_11_type(a11), typename Function::argument_12_type(a12), typename Function::argument_13_type(a13), typename Function::argument_14_type(a14), typename Function::argument_15_type(a15)); };