在我目前正在处理的程序中,许多对象包括与对象一起存在的状态变量。例如,在 3d 模型中表示一个点的对象可能包含一个变量来控制该点是否已被选中进行编辑。很规律地,这些状态变量中的一个或多个将被一段代码临时修改,例如
void MyFunc();
{
mytype temp = statevar;
statevar = newvalue;
DoSomething();
statevar = temp;
}
这有问题,好像DoSomething()
抛出异常,statevar
没有正确恢复。我计划的解决方法是创建一个新的模板类来恢复其 dtor 中的值。就像是
template<class TYPE> class PushState
{
PushState(TYPE Var) { Temp = Var; }
Pop() { Var = Temp; }
~PushState() { Pop(); }
TYPE Temp;
}
void MyFunc();
{
PushState<mytype> Push(statevar);
DoSomething();
}
有没有更好的方法来做到这一点,或者有一种公认的将变量推送到堆栈的方法?