私が現在取り組んでいるプログラムでは、多くのオブジェクトに、オブジェクトと共に持続する状態変数が含まれています。たとえば、3D モデルのポイントを表すオブジェクトには、そのポイントが編集用に選択されているかどうかを制御する変数が含まれる場合があります。非常に定期的に、これらの状態変数の 1 つ以上がコードによって一時的に変更されます。
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();
}
これを行うためのより良い方法、または変数をスタックにプッシュする広く受け入れられている方法はありますか?