也许我想多了,但请考虑以下示例:
bool some_state = false;
// ... later ...
some_state = true;
do_something();
some_state = false;
现在想象一下 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)
boost有这样的东西吗?我当然可以编写自己的对象,但我想确保我没有先重新发明轮子。我在 MSVC 上使用 C++03,所以不幸的是我不能使用任何花哨的新 C++11 :(
最佳答案
Boost 确实有这样的东西。它叫做 state_saver。它有点隐藏在序列化库中,但它是有文档记录的并且显然是官方的(即不在某些细节命名空间中)。
http://www.boost.org/doc/libs/1_56_0/libs/serialization/doc/state_saver.html
关于c++ - 用于恢复先前值的 RAII 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822788/