47 #ifndef BLOCXX_SCOPE_GUARD_HPP_INCLUDE_GUARD_
48 #define BLOCXX_SCOPE_GUARD_HPP_INCLUDE_GUARD_
50 #include "blocxx/BLOCXX_config.h"
53 namespace BLOCXX_NAMESPACE
108 template <
typename F>
134 template <
typename F>
140 template <
typename F,
typename P1>
167 template <
typename F,
typename P1>
173 template <
typename F,
typename P1,
typename P2>
201 template <
typename F,
typename P1,
typename P2>
207 template <
typename F,
typename P1,
typename P2,
typename P3>
236 template <
typename F,
typename P1,
typename P2,
typename P3>
244 template <
class Obj,
typename MemFun>
271 template <
class Obj,
typename MemFun>
277 template <
typename Ret,
class Obj1,
class Obj2>
283 template <
typename Ret,
class Obj1,
class Obj2>
284 inline ObjScopeGuardImpl0<Obj1,Ret(Obj2::*)()>
makeGuard(Ret(Obj2::*memFun)(), Obj1 *obj)
289 template <
class Obj,
typename MemFun,
typename P1>
317 template <
class Obj,
typename MemFun,
typename P1>
323 template <
typename Ret,
class Obj1,
class Obj2,
typename P1a,
typename P1b>
324 inline ObjScopeGuardImpl1<Obj1,Ret(Obj2::*)(P1a),P1b>
makeGuard(Ret(Obj2::*memFun)(P1a), Obj1 &obj, P1b p1)
329 template <
typename Ret,
class Obj1,
class Obj2,
typename P1a,
typename P1b>
330 inline ObjScopeGuardImpl1<Obj1,Ret(Obj2::*)(P1a),P1b>
makeGuard(Ret(Obj2::*memFun)(P1a), Obj1 *obj, P1b p1)
335 template <
class Obj,
typename MemFun,
typename P1,
typename P2>
364 template <
class Obj,
typename MemFun,
typename P1,
typename P2>
370 template <
typename Ret,
class Obj1,
class Obj2,
typename P1a,
typename P1b,
typename P2a,
typename P2b>
371 inline ObjScopeGuardImpl2<Obj1,Ret(Obj2::*)(P1a,P2a),P1b,P2b>
makeGuard(Ret(Obj2::*memFun)(P1a,P2a), Obj1 &obj, P1b p1, P2b p2)
376 template <
typename Ret,
class Obj1,
class Obj2,
typename P1a,
typename P1b,
typename P2a,
typename P2b>
377 inline ObjScopeGuardImpl2<Obj1,Ret(Obj2::*)(P1a,P2a),P1b,P2b>
makeGuard(Ret(Obj2::*memFun)(P1a,P2a), Obj1 *obj, P1b p1, P2b p2)
384 #define BLOCXX_CONCATENATE_DIRECT(s1, s2) s1##s2
385 #define BLOCXX_CONCATENATE(s1, s2) BLOCXX_CONCATENATE_DIRECT(s1, s2)
386 #define BLOCXX_ANONYMOUS_VARIABLE(str) BLOCXX_CONCATENATE(str, __LINE__)
388 #define BLOCXX_ON_BLOCK_EXIT blocxx::ScopeGuard BLOCXX_ANONYMOUS_VARIABLE(scopeGuard) = blocxx::makeGuard
389 #define BLOCXX_ON_BLOCK_EXIT_OBJ blocxx::ScopeGuard BLOCXX_ANONYMOUS_VARIABLE(scopeGuard) = blocxx::makeObjGuard