// ScopeGuardProj.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "SwScopeGuard.h" void DoIt() { std::cout << "Did it" << std::endl; } void DoIt1(int param1) { std::cout << "Did it" << param1 << std::endl; } void DoIt2(int param1,int param2) { std::cout << "Did it" << param1 << param2 << std::endl; } void DoIt3(int param1,int param2, int param3) { std::cout << "Did it" << param1 << param2 << param3 << std::endl; } void DoIt4(int param1,int param2, int param3, int param4) { std::cout << "Did it" << param1 << param2 << param3 << param4 << std::endl; } void DoIt5(int param1,int param2, int param3, int param4, int param5) { std::cout << "Did it" << param1 << param2 << param3 << param4 << param5 << std::endl; } void DoIt6(int param1,int param2, int param3, int param4, int param5, int param6) { std::cout << "Did it" << param1 << param2 << param3 << param4 << param5 << param6 << std::endl; } void DoIt7(int param1,int param2, int param3, int param4, int param5, int param6, int param7) { std::cout << "Did it" << param1 << param2 << param3 << param4 << param5 << param6 << param7 << std::endl; } void DoIt8(int param1,int param2, int param3, int param4, int param5, int param6, int param7, int param8) { std::cout << "Did it" << param1 << param2 << param3 << param4 << param5 << param6 << param7 << param8 << std::endl; } void DoIt9(int param1,int param2, int param3, int param4, int param5, int param6, int param7, int param8, int param9) { std::cout << "Did it" << param1 << param2 << param3 << param4 << param5 << param6 << param7 << param8 << param9 << std::endl; } class DoItObj { public: typedef void result_type; void DoIt(){std::cout << "Did it Obj" << std::endl;} void DoIt1(int param1){std::cout << "Did it Obj" << param1 << std::endl;} void DoIt2(int param1,int param2){std::cout << "Did it Obj" << param1 << param2 << std::endl;} void DoIt3(int param1,int param2,int param3){std::cout << "Did it Obj" << param1 << param2 << param3 << std::endl;} void DoIt4(int param1,int param2,int param3,int param4){ std::cout << "Did it Obj" << param1 << param2 << param3 << param4 << std::endl; } void DoIt5(int param1,int param2,int param3,int param4,int param5){ std::cout << "Did it Obj" << param1 << param2 << param3 << param4 << param5 << std::endl; } void DoIt6(int param1,int param2,int param3,int param4,int param5,int param6){ std::cout << "Did it Obj" << param1 << param2 << param3 << param4 << param5 << param6 << std::endl; } void DoIt7(int param1,int param2,int param3,int param4,int param5,int param6, int param7){ std::cout << "Did it Obj" << param1 << param2 << param3 << param4 << param5 << param6 << param7 << std::endl; } void DoIt8(int param1,int param2,int param3,int param4,int param5,int param6, int param7,int param8){ std::cout << "Did it Obj" << param1 << param2 << param3 << param4 << param5 << param6 << param7 << param8 << std::endl; } void DoIt9(int param1,int param2,int param3,int param4,int param5,int param6, int param7,int param8,int param9){ std::cout << "Did it Obj" << param1 << param2 << param3 << param4 << param5 << param6 << param7 << param8 << param9 << std::endl; } }; //template //void Decrement(T& t){--t;} void Decrement(int& x){--x;} int main(int argc, wchar_t* argv[]) { int count = 1; try { ScopeGuard guard0 = MakeScopeGuard(&DoIt); ScopeGuard guard1 = MakeScopeGuard(&DoIt1,1); ScopeGuard guard2 = MakeScopeGuard(&DoIt2,1,2); ScopeGuard guard3 = MakeScopeGuard(&DoIt3,1,2,3); ScopeGuard guard4 = MakeScopeGuard(&DoIt4,1,2,3,4); ScopeGuard guard5 = MakeScopeGuard(&DoIt5,1,2,3,4,5); ScopeGuard guard6 = MakeScopeGuard(&DoIt6,1,2,3,4,5,6); ScopeGuard guard7 = MakeScopeGuard(&DoIt7,1,2,3,4,5,6,7); ScopeGuard guard8 = MakeScopeGuard(&DoIt8,1,2,3,4,5,6,7,8); ScopeGuard guard9 = MakeScopeGuard(&DoIt9,1,2,3,4,5,6,7,8,9); guard9.Dismiss(); DoItObj obj; ScopeGuard objguard0 = MakeScopeGuard(obj,&DoItObj::DoIt); ScopeGuard objguard1 = MakeScopeGuard(obj,&DoItObj::DoIt1,1); ScopeGuard objguard2 = MakeScopeGuard(obj,&DoItObj::DoIt2,1,2); ScopeGuard objguard3 = MakeScopeGuard(obj,&DoItObj::DoIt3,1,2,3); ScopeGuard objguard4 = MakeScopeGuard(obj,&DoItObj::DoIt4,1,2,3,4); ScopeGuard objguard5 = MakeScopeGuard(obj,&DoItObj::DoIt5,1,2,3,4,5); ScopeGuard objguard6 = MakeScopeGuard(obj,&DoItObj::DoIt6,1,2,3,4,5,6); ScopeGuard objguard7 = MakeScopeGuard(obj,&DoItObj::DoIt7,1,2,3,4,5,6,7); ScopeGuard objguard8 = MakeScopeGuard(obj,&DoItObj::DoIt8,1,2,3,4,5,6,7,8); // If we throw, any following ScopeGuards will not get created // and, therefore, will not fire. // throw 1; ScopeGuard guarddec = MakeScopeGuard(&Decrement,boost::ref(count)); } catch(...) { std::cout << "Caught exception" << std::endl; } std::cout << "Ending count: " << count << std::endl; std::cin.ignore(); return 0; }