问题
有些变量,它们在特定的情况下才有意义。有些功能需要多步才能完成,结果就需要一些中间变量保存过程的状态,过程结束后变量就失去存在的价值。缺点:
- 浪费存储空间,虽然内存很廉价,但还是能省则省
- 中间变量变多的时候,所在类越来越大,越来越难以理解
解决方案
封装一个中间变量管理器:支持创建、删除、取值、设值这几个操作就行。
临时变量定义:
class Player
{
public:
enum TempVariableType
{
kTempInvalid,
kTempTest,
kTempJumpVerification,
};
TempVariableManager<Player> tmpvars;
};
struct JumpVerification
{
JumpVerification(DWORD x_=0, DWORD y_=0, DWORD mapid_=0) :
x(x_), y(y_), mapid(mapid_) {}
DWORD x;
DWORD y;
DWORD mapid;
};
// 中间变量的定义
define_tempvariable(Player, kTempTest, DWORD);
define_tempvariable(Player, kTempJumpVerification, JumpVerification);
临时变量的使用:
// 新创建
pUser->tmpvars.create<SceneUser::kTempTest>(20);
pUser->tmpvars.create<SceneUser::kTempJumpVerification>(JumpVerification(10,10,101));
// 删除
pUser->tmpvars.release(SceneUser::kTempTest);
pUser->tmpvars.release(SceneUser::kTempJumpVerification);
// 取值
pUser->tmpvars.get<SceneUser::kTempTest>();
pUser->tmpvars.get<SceneUser::kTempJumpVerification>().x
pUser->tmpvars.get<SceneUser::kTempJumpVerification>().y
JumpVerification& jv = pUser->tmpvars.get<SceneUser::kTempJumpVerification>();
jv.x;
jv.y;
// 设值
pUser->tmpvars.get<SceneUser::kTempTest>() = 100;
pUser->tmpvars.get<SceneUser::kTempJumpVerification>().x = 100;
JumpVerification& jv = pUser->tmpvars.get<SceneUser::kTempJumpVerification>();
jv.x = 100;
jv.y = 100;
2012/05/08 21:00 于上海