⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 methods_v.h

📁 cpptcl library for ns2
💻 H
📖 第 1 页 / 共 2 页
字号:
//// 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 + -