Proposal: Minimalist ScopeGuard

Hi All, I've uploaded a very simple version of Andrei and Petru's ScopeGuard to the files section: http://groups.yahoo.com/group/boost/files/scope_guard.zip. It's only smart enough to handle cleanup functions or function objects with the signature 'void f()'; more complex cleanup is easy with Bind or Lambda. There are two object generators: - make_guard returns a scope guard which propagates exceptions - safe_guard returns a scope guard which catches and ignores exceptions Similarly, there are two macros - BOOST_SCOPE_GUARD declares an anonymous scope guard which propagates exceptions - BOOST_SAFE_GUARD declares an anonymous scope guard which catches and ignores exceptions Best Regards, Jonathan //------------------Example--------------------// #include <iostream> #include <boost/bind.hpp> #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> #include <boost/scope_guard.hpp> void goodbye() { std::cout << "goodbye\n"; } void crash() { throw 0; } struct T { void goodbye() { std::cout << "goodbye\n"; } }; // // Expected output: // hello // goodbye // goodbye // goodbye // goodbye // goodbye // int main() { using namespace boost; T t; // Scope guard which invokes t.goodbye(). scope_guard g1 = make_guard(boost::bind(&T::goodbye, t)); // Scope guard which invokes goodbye(). scope_guard g2 = make_guard(goodbye); // Scope guard which executes std::cout << "goodbye\n". scope_guard g3 = make_guard( std::cout << boost::lambda::constant("goodbye\n") ); // Scope guard which invokes crash() in a try-catch block. scope_guard g4 = safe_guard(crash); // Scope guard which invokes crash(). scope_guard g5 = make_guard(crash); g5.dismiss(); // Scope guard which invokes goodbye(). BOOST_SCOPE_GUARD(goodbye); // Same. (Shows that generated variable names are working.) BOOST_SCOPE_GUARD(goodbye); // Scope guard which invokes crash() in a try-catch block. BOOST_SAFE_GUARD(crash); std::cout << "hello\n"; }
participants (1)
-
Jonathan Turkanis