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( TVar & var_r )
54 : _pimpl( new Impl<TVar,TVar>( var_r, var_r ) )
56 template<class TVar, class TVal>
57 DtorReset( TVar & var_r, const TVal & val_r )
58 : _pimpl( new Impl<TVar,TVal>( var_r, val_r ) )
62 /** Requires TVal being copy constructible, and assignment
63 * <tt>TVar = TVal</tt> defined. */
64 template<class TVar, class TVal>
67 Impl( TVar & var_r, const TVal & val_r )
76 shared_ptr<void> _pimpl;
78 ///////////////////////////////////////////////////////////////////
80 /////////////////////////////////////////////////////////////////
82 ///////////////////////////////////////////////////////////////////
83 #endif // ZYPP_BASE_DTORRESET_H