#include <boost/scope_exit.hpp> #include <iostream> int scope_test() { int res = 0; std::cout << "scope_test" << std::endl; BOOST_SCOPE_EXIT( (&res) ) { std::cout << "boost scope exit work!" << std::endl; res = 3; } BOOST_SCOPE_EXIT_END std::cout << "scope_test: res = " << res << std::endl; return res; } int scope_test2( int success ) { int res = 0; std::cout << "scope_test2" << std::endl; while(1) { BOOST_SCOPE_EXIT( (&res) ) { if( !res ) { // success case std::cout << "Something to Commit." << std::endl; std::cout << "But fail to Commit, and reset result." << std::endl; res = 3; } else { // fail case std::cout << "Something to Rollback." << std::endl; } } BOOST_SCOPE_EXIT_END if( !success ) { std::cout << "FAIL" << std::endl; res = 1; break; } std::cout << "SUCCESS" << std::endl; break; } return res; } int main() { std::cout << "result of scope_test = " << scope_test() << std::endl; std::cout << "------------------------------" << std::endl; std::cout << "result of scope_test(SUCCESS) = " << scope_test2( 1 ) << std::endl; std::cout << "------------------------------" << std::endl; std::cout << "result of scope_test(FAIL) = " << scope_test2( 0 ) << std::endl; return 0; }
追記:
Class の Member function 中から、終了時に Class の Member function をコールしたい場合の擬似コードは
void Foo::bar() { Foo* this_pointer = this; BOOST_SCOPE_EXIT( (this_pointer) ) { this_pointer->another_member_function(); } BOOST_SCOPE_EXIT_END ... }
0 件のコメント:
コメントを投稿