参数绑定器

/********************************************************************
*  文件名:   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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值