参数绑定器

来源:互联网 发布:淘宝上的酷狗会员没了 编辑:程序博客网 时间:2024/06/04 17:44
/*********************************************************************  文件名:   Bind_Par.h*  文件描述: 参数绑定器*  创建人:   陈泽丹 ,2012年10月25日     *  版本号:   1.0*  备注:     每次打包参数以做网络通讯的传递太麻烦了, 所以封装绑定参数的操作。 其中利用模板参和偏特化无关联的特性,让使用者可采用参数来区分,而不是采用模板名不同来区分********************************************************************/#define TYPELIST_1(T1) \Typelist<T1, NullType>#define TYPELIST_2(T1, T2) \Typelist<T1, TYPELIST_1(T2) >#define TYPELIST_3(T1, T2, T3) \Typelist<T1, TYPELIST_2(T2, T3) >#define TYPELIST_4(T1, T2, T3, T4) \Typelist<T1, TYPELIST_3(T2, T3, T4) >#define TYPELIST_5(T1, T2, T3, T4, T5) \Typelist<T1, TYPELIST_4(T2, T3, T4, T5) >class NullType {};  template <class T, class U>  struct Typelist  {  typedef T Head;  typedef U Tail;  }; template <class TList>struct Bind_Par;template <class _P1>struct Bind_Par< TYPELIST_1(_P1) >{public:typedef _P1 Parm1;Parm1 par1;Bind_Par< TYPELIST_1(Parm1) >( Parm1 _par1): par1(_par1){}};template <class _P1, class _P2>struct Bind_Par< TYPELIST_2(_P1, _P2) >{public:typedef _P1 Parm1;typedef _P2 Parm2;Parm1 par1;Parm2 par2;Bind_Par< TYPELIST_2(Parm1, Parm2) >( Parm1 _par1, Parm2 _par2): par1(_par1), par2(_par2){}};template <class _P1, class _P2, class _P3>struct Bind_Par< TYPELIST_3(_P1, _P2, _P3) >{public:typedef _P1 Parm1;typedef _P2 Parm2;typedef _P3 Parm3;Parm1 par1;Parm2 par2;Parm3 par3;Bind_Par< TYPELIST_3(Parm1, Parm2, Parm3) >( Parm1 _par1, Parm2 _par2, Parm3 _par3): par1(_par1), par2(_par2), par3(_par3){}};template <class _P1, class _P2, class _P3, class _P4>struct Bind_Par< TYPELIST_4(_P1, _P2, _P3, _P4) >{public:typedef _P1 Parm1;typedef _P2 Parm2;typedef _P3 Parm3;typedef _P4 Parm4;Parm1 par1;Parm2 par2;Parm3 par3;Parm4 par4;Bind_Par< TYPELIST_4(Parm1, Parm2, Parm3, Parm4) >( Parm1 _par1, Parm2 _par2, Parm3 _par3, Parm4 _par4): par1(_par1), par2(_par2), par3(_par3), par4(_par4){}};template <class _P1, class _P2, class _P3, class _P4, class _P5>struct Bind_Par< TYPELIST_5(_P1, _P2, _P3, _P4, _P5) >{public:typedef _P1 Parm1;typedef _P2 Parm2;typedef _P3 Parm3;typedef _P4 Parm4;typedef _P5 Parm5;Parm1 par1;Parm2 par2;Parm3 par3;Parm4 par4;Parm5 par5;Bind_Par< TYPELIST_5(Parm1, Parm2, Parm3, Parm4, Parm5) >( Parm1 _par1, Parm2 _par2, Parm3 _par3, Parm4 _par4, Parm5 _par5): par1(_par1), par2(_par2), par3(_par3), par4(_par4), par5(_par5){}};struct GameMsg{GameMsg(long _role_uid, long _world_uid, long _world_x, long _world_y):data(_role_uid, _world_uid, _world_x, _world_y){}Bind_Par< TYPELIST_4(long, long, long, long) > data;};

#include <iostream>using namespace std;#include "Bind_Par.h"void main(){GameMsg move(101, 1, 50, 40);cout<<move.data.par1<<endl;cout<<move.data.par2<<endl;cout<<move.data.par3<<endl;cout<<move.data.par4<<endl;system("pause");}

原创粉丝点击