【发布时间】:2016-03-10 08:37:27
【问题描述】:
我需要改变一个状态。然后做事。然后将状态重置为原来的状态 - 例如:
auto oldActivationOrder = mdiArea->activationOrder();
mdiArea->setActivationOrder( QMdiArea::StackingOrder );
mdiArea->cascadeSubWindows();
mdiArea->setActivationOrder( oldActivationOrder );
如何以 RAII 方式执行此操作? (c++ 11 和/或 14)
编辑:感谢所有答案。
有几个建议可以创建一个自定义类来处理状态变化(BoBTFish、mindriot、Mattias Johansson)。这个解决方案看起来很好而且很清楚。但是我认为这是一个缺点,它将行数从 4 增加到 20+。如果使用很多,这会使代码膨胀。此外,似乎有一个单独的班级会丢失一些地方性。
Ami Tavory 建议使用 std::unique_ptr。这没有代码膨胀问题并保持局部性。但是,正如 Ami 也指出的那样,它可能不是最易读的解决方案。
sp2danny 提出了一个可重用的通用状态更改类。这避免了代码膨胀,只要它可以替换几个自定义类。我会接受这个答案 - 但我想正确的方法确实取决于上下文。
【问题讨论】: