也许我在想这个,但请考虑以下示例:
bool some_state = false;
// ... later ...
some_state = true;
do_something();
some_state = false;
Run Code Online (Sandbox Code Playgroud)
现在想象一下do_something()可以抛出.我们不会再some_state回头了false.什么是好的是有一些自动堆栈,基于范围推送/弹出记住以前的值:
{
scoped_restore res( some_state, true ); // This sets some_state to true and remembers previous value (false)
do_something();
} // At this point, res is destroyed and sets some_state back to false (previous value)
Run Code Online (Sandbox Code Playgroud)
助推器有这样的东西吗?我当然可以写自己的对象,但我想确保我不是先重新发明轮子.我在MSVC上使用C++ 03,所以我不能使用任何花哨的新C++ 11 :(
Boost确实有这样的东西。它被称为state_saver。它有点隐藏在序列化库中,但它是有文档记录的并且显然是官方的(即不在某些详细的命名空间中)。
http://www.boost.org/doc/libs/1_56_0/libs/serialization/doc/state_saver.html
演示: http: //rextester.com/NVXUG70771