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[]'.
55 DtorReset( TVar & var_r )
56 : _pimpl( new Impl<TVar,TVar>( var_r, var_r ) )
58 template<class TVar, class TVal>
59 DtorReset( TVar & var_r, const TVal & val_r )
60 : _pimpl( new Impl<TVar,TVal>( var_r, val_r ) )
64 /** Requires TVal being copy constructible, and assignment
65 * <tt>TVar = TVal</tt> defined. */
66 template<class TVar, class TVal>
69 Impl( TVar & var_r, const TVal & val_r )
78 shared_ptr<void> _pimpl;
80 ///////////////////////////////////////////////////////////////////
82 /////////////////////////////////////////////////////////////////
84 ///////////////////////////////////////////////////////////////////
85 #endif // ZYPP_BASE_DTORRESET_H