1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/base/DtorReset.h
12 #ifndef ZYPP_BASE_DTORRESET_H
13 #define ZYPP_BASE_DTORRESET_H
15 #include "zypp/base/PtrTypes.h"
17 ///////////////////////////////////////////////////////////////////
19 { /////////////////////////////////////////////////////////////////
21 ///////////////////////////////////////////////////////////////////
23 // CLASS NAME : DtorReset
25 /** Assign a vaiable a certain value when going out of scope.
26 * Use it e.g. to reset/cleanup in presence of exceptions.
32 * DtorReset x(_inConsume,false);
34 * MIL << _inConsume << endl;
37 * DefaultIntegral<bool,false> _inConsume;
41 * MIL << f._inConsume << endl; // 0
43 * MIL << f._inConsume << endl; // 0
46 * \todo Check if using call_traits enables 'DtorReset(std::string,"value")',
47 * as this currently would require assignment of 'char[]'.
53 DtorReset( _Var & var_r )
54 : _pimpl( new Impl<_Var,_Var>( var_r, var_r ) )
56 template<class _Var, class _Val>
57 DtorReset( _Var & var_r, const _Val & val_r )
58 : _pimpl( new Impl<_Var,_Val>( var_r, val_r ) )
62 /** Requires _Val being copy constructible, and assignment
63 * <tt>_Var = _Val</tt> defined. */
64 template<class _Var, class _Val>
67 Impl( _Var & var_r, const _Val & val_r )
76 shared_ptr<void> _pimpl;
78 ///////////////////////////////////////////////////////////////////
80 /////////////////////////////////////////////////////////////////
82 ///////////////////////////////////////////////////////////////////
83 #endif // ZYPP_BASE_DTORRESET_H