class ReverseBoolean {
ReverseBoolean (bool &flag)
: m_flag(flag) {}
ReverseBoolean (bool &flag, bool initVal)
: m_flag(flag = initVal) {}
~ReverseBoolean ()
{
m_flag = !m_flag;
}
private:
bool &m_flag;
};
//case 1 true --> false
bool flag{true};
void f() {
ReverseBoolean rb(flag) // call构造, 绑定flag;
...
} // call析构, set flag --> false
//case 2 false--> true
bool flag{false};
void f() {
ReverseBoolean rb(flag) // call构造, 绑定flag;
...
} // call析构, set flag --> true
//case 3 true--> false
bool flag;
void f() {
ReverseBoolean rb(flag, true); // call构造, 绑定flag并设置初始值true
...
} // call析构, set flag --> false
//case 4 false --> true
bool flag;
void f() {
ReverseBoolean rb(flag, false); // call构造, 绑定flag并设置初始值false
...
} // call析构, set flag --> true
基于RAII实现布尔值反转
于 2022-05-06 13:54:42 首次发布