我最近观看了 Andrei Alexandrescu 在 'C++ and Beyond 2012'(使用 C++ 的系统错误处理)中的演讲,他在其中讨论了他的 ScopeGuard11 构造,特别是SCOPE_EXIT
(演讲的第二部分;或者只是在这里阅读代码)。同时,我开始研究 Boost 库,并注意到BOOST_SCOPE_EXIT
宏(Boost.ScopeExit 库)。
这两个在实现方面似乎完全不同(BOOST_SCOPE_EXIT
使用Boost.TypeOf
,与 ScopeGuard11 中的完全不同SCOPE_EXIT
);并且 Boost 宏与参数捕获等有关,这在 C++11 中不是什么问题;但除此之外,它们似乎提供了基本相同的功能。
我是对的还是我错过了什么?有人可以说 ScopeGuard11 是一种“更干净”的机制,具有与 Boost.ScopeGuard 相同的功能,但向后兼容性较差?