📄 methods_v.h
字号:
//// Copyright (C) 2004-2006, Maciej Sobczak//// Permission to copy, use, modify, sell and distribute this software// is granted provided this copyright notice appears in all copies.// This software is provided "as is" without express or implied// warranty, and with no claim as to its suitability for any purpose.//// Note: this file is not supposed to be a stand-alone headertemplate <class C, typename R>class method1<C, R, object const &> : public object_cmd_base{ typedef object const & T1; typedef R (C::*mem_type)(T1); typedef R (C::*cmem_type)(T1) const; enum { var_start = 2 }; public: method1(mem_type f) : f_(f), cmem_(false) {} method1(cmem_type f) : cf_(f), cmem_(true) {} virtual void invoke(void *pv, Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[], policies const &pol) { C *p = static_cast<C*>(pv); object t1 = get_var_params(interp, objc, objv, var_start, pol); if (cmem_) { dispatch<R>::template do_dispatch<T1>( interp, boost::bind(cf_, p, _1), t1); } else { dispatch<R>::template do_dispatch<T1>( interp, boost::bind(f_, p, _1), t1); } }private: mem_type f_; cmem_type cf_; bool cmem_;};template <class C, typename R, typename T1>class method2<C, R, T1, object const &> : public object_cmd_base{ typedef object const & T2; typedef R (C::*mem_type)(T1, T2); typedef R (C::*cmem_type)(T1, T2) const; enum { var_start = 3 }; public: method2(mem_type f) : f_(f), cmem_(false) {} method2(cmem_type f) : cf_(f), cmem_(true) {} virtual void invoke(void *pv, Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[], policies const &pol) { C *p = static_cast<C*>(pv); object t2 = get_var_params(interp, objc, objv, var_start, pol); if (cmem_) { dispatch<R>::template do_dispatch<T1, T2>( interp, boost::bind(cf_, p, _1, _2), tcl_cast<T1>::from(interp, objv[2]), t2); } else { dispatch<R>::template do_dispatch<T1, T2>( interp, boost::bind(f_, p, _1, _2), tcl_cast<T1>::from(interp, objv[2]), t2); } }private: mem_type f_; cmem_type cf_; bool cmem_;};template <class C, typename R, typename T1, typename T2>class method3<C, R, T1, T2, object const &> : public object_cmd_base{ typedef object const & T3; typedef R (C::*mem_type)(T1, T2, T3); typedef R (C::*cmem_type)(T1, T2, T3) const; enum { var_start = 4 }; public: method3(mem_type f) : f_(f), cmem_(false) {} method3(cmem_type f) : cf_(f), cmem_(true) {} virtual void invoke(void *pv, Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[], policies const &pol) { C *p = static_cast<C*>(pv); object t3 = get_var_params(interp, objc, objv, var_start, pol); if (cmem_) { dispatch<R>::template do_dispatch<T1, T2, T3>( interp, boost::bind(cf_, p, _1, _2, _3), tcl_cast<T1>::from(interp, objv[2]), tcl_cast<T2>::from(interp, objv[3]), t3); } else { dispatch<R>::template do_dispatch<T1, T2, T3>( interp, boost::bind(f_, p, _1, _2, _3), tcl_cast<T1>::from(interp, objv[2]), tcl_cast<T2>::from(interp, objv[3]), t3); } }private: mem_type f_; cmem_type cf_; bool cmem_;};template <class C, typename R, typename T1, typename T2, typename T3>class method4<C, R, T1, T2, T3, object const &> : public object_cmd_base{ typedef object const & T4; typedef R (C::*mem_type)(T1, T2, T3, T4); typedef R (C::*cmem_type)(T1, T2, T3, T4) const; enum { var_start = 5 }; public: method4(mem_type f) : f_(f), cmem_(false) {} method4(cmem_type f) : cf_(f), cmem_(true) {} virtual void invoke(void *pv, Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[], policies const &pol) { C *p = static_cast<C*>(pv); object t4 = get_var_params(interp, objc, objv, var_start, pol); if (cmem_) { dispatch<R>::template do_dispatch<T1, T2, T3, T4>( interp, boost::bind(cf_, p, _1, _2, _3, _4), tcl_cast<T1>::from(interp, objv[2]), tcl_cast<T2>::from(interp, objv[3]), tcl_cast<T3>::from(interp, objv[4]), t4); } else { dispatch<R>::template do_dispatch<T1, T2, T3, T4>( interp, boost::bind(f_, p, _1, _2, _3, _4), tcl_cast<T1>::from(interp, objv[2]), tcl_cast<T2>::from(interp, objv[3]), tcl_cast<T3>::from(interp, objv[4]), t4); } }private: mem_type f_; cmem_type cf_; bool cmem_;};template <class C, typename R, typename T1, typename T2, typename T3, typename T4>class method5<C, R, T1, T2, T3, T4, object const &> : public object_cmd_base{ typedef object const & T5; typedef R (C::*mem_type)(T1, T2, T3, T4, T5); typedef R (C::*cmem_type)(T1, T2, T3, T4, T5) const; enum { var_start = 6 }; public: method5(mem_type f) : f_(f), cmem_(false) {} method5(cmem_type f) : cf_(f), cmem_(true) {} virtual void invoke(void *pv, Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[], policies const &pol) { C *p = static_cast<C*>(pv); object t5 = get_var_params(interp, objc, objv, var_start, pol); if (cmem_) { dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5>( interp, boost::bind(cf_, p, _1, _2, _3, _4, _5), tcl_cast<T1>::from(interp, objv[2]), tcl_cast<T2>::from(interp, objv[3]), tcl_cast<T3>::from(interp, objv[4]), tcl_cast<T4>::from(interp, objv[5]), t5); } else { dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5>( interp, boost::bind(f_, p, _1, _2, _3, _4, _5), tcl_cast<T1>::from(interp, objv[2]), tcl_cast<T2>::from(interp, objv[3]), tcl_cast<T3>::from(interp, objv[4]), tcl_cast<T4>::from(interp, objv[5]), t5); } }private: mem_type f_; cmem_type cf_; bool cmem_;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -