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 + -
显示快捷键?