c++ - 用于恢复先前值的 RAII 对象

标签 c++ boost c++03

也许我想多了,但请考虑以下示例:

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

演示:http://rextester.com/NVXUG70771

关于c++ - 用于恢复先前值的 RAII 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822788/

相关文章:

c++ - 多个枚举是否由换行符分隔然后逗号总是可移植的?

c++ - Qt:有效地在父小部件上绘制小部件的正确方法

c++ - 在后端运行成员函数而不减慢主应用程序的技巧是什么?

c++ - 将 pow 函数与 cpp_dec_float 结合使用

c++ - C++ 中的多值排序

c++ - 用常量值填充 std::vector<double>

带重载的 C++ 动态绑定(bind)

c++ - 在不使用 Epoll 的 Linux 上 boost Asio

c++ - 如何在 Android NDK 和 STLport 中使用 boost 库(包括 shared_ptr)

c++ - std::cout 在具有静态存储持续时间的对象的构造函数中的使用