binders.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 2,334 行 · 第 1/5 页

HPP
2,334
字号
#if PHOENIX_LIMIT > 9    ,   typename J = nil_t    ,   typename K = nil_t    ,   typename L = nil_t#if PHOENIX_LIMIT > 12    ,   typename M = nil_t    ,   typename N = nil_t    ,   typename O = nil_t#endif#endif#endif#endif    ,   typename NU = nil_t  // Not used>struct member_function_ptr_action;//////////////////////////////////template <    typename RT,    typename ClassT    ,   typename A = nil_t    ,   typename B = nil_t    ,   typename C = nil_t#if PHOENIX_LIMIT > 3    ,   typename D = nil_t    ,   typename E = nil_t    ,   typename F = nil_t#if PHOENIX_LIMIT > 6    ,   typename G = nil_t    ,   typename H = nil_t    ,   typename I = nil_t#if PHOENIX_LIMIT > 9    ,   typename J = nil_t    ,   typename K = nil_t    ,   typename L = nil_t#if PHOENIX_LIMIT > 12    ,   typename M = nil_t    ,   typename N = nil_t    ,   typename O = nil_t#endif#endif#endif#endif>struct member_function_ptr:   public function<member_function_ptr_action<RT, ClassT    , A, B, C#if PHOENIX_LIMIT > 3    , D, E, F#if PHOENIX_LIMIT > 6    , G, H, I#if PHOENIX_LIMIT > 9    , J, K, L#if PHOENIX_LIMIT > 12    , M, N, O#endif#endif#endif#endif    > > {    typedef member_function_ptr_action<RT, ClassT        , A, B, C#if PHOENIX_LIMIT > 3        , D, E, F#if PHOENIX_LIMIT > 6        , G, H, I#if PHOENIX_LIMIT > 9        , J, K, L#if PHOENIX_LIMIT > 12        , M, N, O#endif#endif#endif#endif    > action_t;    template <typename FPT>    member_function_ptr(FPT fp)    :   function<action_t>(action_t(fp)) {}};///////////////////////////////////////////////////////////////////////////////////  Member function pointer binder (specialization for 0 arg)/////////////////////////////////////////////////////////////////////////////////template <typename RT, typename ClassT>struct member_function_ptr_action<RT, ClassT,    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 3    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 6    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 9    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12    nil_t, nil_t, nil_t,#endif#endif#endif#endif    nil_t   //  Unused> {    typedef RT result_type;    typedef RT(ClassT::*mf)();    typedef RT(ClassT::*cmf)() const;    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type        mem_func_ptr_t;    template <typename CT>    struct result { typedef result_type type; };    member_function_ptr_action(mem_func_ptr_t fptr_)    :   fptr(fptr_) {}    template <typename CT>    result_type operator()(CT& obj) const    { return (impl::as_ptr<CT>::get(obj)->*fptr)(); }    mem_func_ptr_t fptr;};//////////////////////////////////template <typename RT, typename ClassT>inline member_function_ptr<RT, ClassT>bind(RT(ClassT::*fptr)()){    return member_function_ptr<RT, ClassT>(fptr);}template <typename RT, typename ClassT>inline member_function_ptr<RT, ClassT const>bind(RT(ClassT::*fptr)() const){    return member_function_ptr<RT, ClassT const>(fptr);}///////////////////////////////////////////////////////////////////////////////////  Member function pointer binder (specialization for 1 arg)/////////////////////////////////////////////////////////////////////////////////template <typename RT, typename ClassT, typename A>struct member_function_ptr_action<RT, ClassT,    A, nil_t, nil_t,#if PHOENIX_LIMIT > 3    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 6    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 9    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12    nil_t, nil_t, nil_t,#endif#endif#endif#endif    nil_t   //  Unused> {    typedef RT result_type;    typedef RT(ClassT::*mf)(A);    typedef RT(ClassT::*cmf)(A) const;    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type        mem_func_ptr_t;    template <typename CT, typename A_>    struct result { typedef result_type type; };    member_function_ptr_action(mem_func_ptr_t fptr_)    :   fptr(fptr_) {}    template <typename CT>    result_type operator()(CT& obj, A a) const    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a); }    mem_func_ptr_t fptr;};//////////////////////////////////template <typename RT, typename ClassT, typename A>inline member_function_ptr<RT, ClassT, A>bind(RT(ClassT::*fptr)(A)){    return member_function_ptr<RT, ClassT, A>(fptr);}//////////////////////////////////template <typename RT, typename ClassT, typename A>inline member_function_ptr<RT, ClassT const, A>bind(RT(ClassT::*fptr)(A) const){    return member_function_ptr<RT, ClassT const, A>(fptr);}///////////////////////////////////////////////////////////////////////////////////  Member function pointer binder (specialization for 2 args)/////////////////////////////////////////////////////////////////////////////////template <typename RT, typename ClassT, typename A, typename B>struct member_function_ptr_action<RT, ClassT,    A, B, nil_t,#if PHOENIX_LIMIT > 3    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 6    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 9    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12    nil_t, nil_t, nil_t,#endif#endif#endif#endif    nil_t   //  Unused> {    typedef RT result_type;    typedef RT(ClassT::*mf)(A, B);    typedef RT(ClassT::*cmf)(A, B) const;    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type        mem_func_ptr_t;    template <typename CT, typename A_, typename B_>    struct result { typedef result_type type; };    member_function_ptr_action(mem_func_ptr_t fptr_)    :   fptr(fptr_) {}    template <typename CT>    result_type operator()(CT& obj, A a, B b) const    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b); }    mem_func_ptr_t fptr;};//////////////////////////////////template <typename RT, typename ClassT, typename A, typename B>inline member_function_ptr<RT, ClassT, A, B>bind(RT(ClassT::*fptr)(A, B)){    return member_function_ptr<RT, ClassT, A, B>(fptr);}//////////////////////////////////template <typename RT, typename ClassT, typename A, typename B>inline member_function_ptr<RT, ClassT const, A, B>bind(RT(ClassT::*fptr)(A, B) const){    return member_function_ptr<RT, ClassT const, A, B>(fptr);}#if PHOENIX_LIMIT > 3///////////////////////////////////////////////////////////////////////////////////  Member function pointer binder (specialization for 3 args)/////////////////////////////////////////////////////////////////////////////////template <typename RT, typename ClassT, typename A, typename B, typename C>struct member_function_ptr_action<RT, ClassT,    A, B, C, nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 6    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 9    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12    nil_t, nil_t, nil_t,#endif#endif#endif    nil_t   //  Unused> {    typedef RT result_type;    typedef RT(ClassT::*mf)(A, B, C);    typedef RT(ClassT::*cmf)(A, B, C) const;    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type        mem_func_ptr_t;    template <typename CT, typename A_, typename B_, typename C_>    struct result { typedef result_type type; };    member_function_ptr_action(mem_func_ptr_t fptr_)    :   fptr(fptr_) {}    template <typename CT>    result_type operator()(CT& obj, A a, B b, C c) const    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c); }    mem_func_ptr_t fptr;};//////////////////////////////////template <typename RT, typename ClassT, typename A, typename B, typename C>inline member_function_ptr<RT, ClassT, A, B, C>bind(RT(ClassT::*fptr)(A, B, C)){    return member_function_ptr<RT, ClassT, A, B, C>(fptr);}//////////////////////////////////template <typename RT, typename ClassT, typename A, typename B, typename C>inline member_function_ptr<RT, ClassT const, A, B, C>bind(RT(ClassT::*fptr)(A, B, C) const){    return member_function_ptr<RT, ClassT const, A, B, C>(fptr);}///////////////////////////////////////////////////////////////////////////////////  Member function pointer binder (specialization for 4 args)/////////////////////////////////////////////////////////////////////////////////template <typename RT, typename ClassT,    typename A, typename B, typename C, typename D>struct member_function_ptr_action<RT, ClassT,    A, B, C, D, nil_t, nil_t,#if PHOENIX_LIMIT > 6    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 9    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12    nil_t, nil_t, nil_t,#endif#endif#endif    nil_t   //  Unused> {    typedef RT result_type;    typedef RT(ClassT::*mf)(A, B, C, D);    typedef RT(ClassT::*cmf)(A, B, C, D) const;    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type        mem_func_ptr_t;    template <typename CT,        typename A_, typename B_, typename C_, typename D_    >    struct result { typedef result_type type; };    member_function_ptr_action(mem_func_ptr_t fptr_)    :   fptr(fptr_) {}    template <typename CT>    result_type operator()(CT& obj,        A a, B b, C c, D d    ) const    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d); }    mem_func_ptr_t fptr;};//////////////////////////////////template <typename RT, typename ClassT,    typename A, typename B, typename C, typename D>inline member_function_ptr<RT, ClassT, A, B, C, D>bind(RT(ClassT::*fptr)(A, B, C, D)){    return member_function_ptr<        RT, ClassT, A, B, C, D>(fptr);}//////////////////////////////////template <typename RT, typename ClassT,    typename A, typename B, typename C, typename D>inline member_function_ptr<RT, ClassT const, A, B, C, D>bind(RT(ClassT::*fptr)(A, B, C, D) const){    return member_function_ptr<        RT, ClassT const, A, B, C, D>(fptr);}///////////////////////////////////////////////////////////////////////////////////  Member function pointer binder (specialization for 5 args)/////////////////////////////////////////////////////////////////////////////////template <typename RT, typename ClassT,    typename A, typename B, typename C, typename D,    typename E>struct member_function_ptr_action<RT, ClassT,    A, B, C, D, E, nil_t,#if PHOENIX_LIMIT > 6    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 9    nil_t, nil_t, nil_t,#if PHOENIX_LIMIT > 12    nil_t, nil_t, nil_t,#endif#endif#endif    nil_t   //  Unused> {    typedef RT result_type;    typedef RT(ClassT::*mf)(A, B, C, D, E);    typedef RT(ClassT::*cmf)(A, B, C, D, E) const;    typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type        mem_func_ptr_t;    template <typename CT,        typename A_, typename B_, typename C_, typename D_,        typename E_    >    struct result { typedef result_type type; };    member_function_ptr_action(mem_func_ptr_t fptr_)    :   fptr(fptr_) {}    template <typename CT>    result_type operator()(CT& obj,        A a, B b, C c, D d, E e    ) const    { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e); }    mem_func_ptr_t fptr;};//////////////////////////////////template <typename RT, typename ClassT,    typename A, typename B, typename C, typename D,    typename E>inline member_function_ptr<RT, ClassT, A, B, C, D, E>bind(RT(ClassT::*fptr)(A, B, C, D, E)){    return member_function_ptr<        RT, ClassT, A, B, C, D, E>(fptr);}//////////////////////////////////template <typename RT, typename ClassT,    typename A, typename B, typename C, typename D,    typename E>inline member_function_ptr<RT, ClassT const, A, B, C, D, E>bind(RT(ClassT::*fptr)(A, B, C, D, E) const){    return member_function_ptr<        RT, ClassT const, A, B, C, D, E>(fptr);}#if PHOENIX_LIMIT > 6///////////////////////////////////////////////////////////////////////////////////  Member function pointer binder (specialization for 6 args)/////////////////////////////////////////////////////////////////////////////////template <typename RT, typename ClassT,    typename A, typename B, typename C, typename D,    typename E, typename F

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?