Skip to content

Commit

Permalink
add andrei alexandrescu's scope guard implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
pkrumins committed Aug 13, 2010
1 parent 48ace77 commit 7be01eb
Show file tree
Hide file tree
Showing 2 changed files with 736 additions and 0 deletions.
70 changes: 70 additions & 0 deletions src/loki/RefToValue.h
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,70 @@
////////////////////////////////////////////////////////////////////////////////
// The Loki Library
// Copyright (c) 2006 Richard Sposato
// Copyright (c) 2006 Peter Kümmel
// Permission to use, copy, modify, distribute and sell this software for any
// purpose is hereby granted without fee, provided that the above copyright
// notice appear in all copies and that both that copyright notice and this
// permission notice appear in supporting documentation.
// The authors make no representations about the
// suitability of this software for any purpose. It is provided "as is"
// without express or implied warranty.
////////////////////////////////////////////////////////////////////////////////
#ifndef LOKI_REFTOVALUE_INC_
#define LOKI_REFTOVALUE_INC_

// $Id: RefToValue.h 751 2006-10-17 19:50:37Z syntheticpp $


namespace Loki
{

////////////////////////////////////////////////////////////////////////////////
/// \class RefToValue
///
/// \ingroup SmartPointerGroup
/// Transports a reference as a value
/// Serves to implement the Colvin/Gibbons trick for SmartPtr/ScopeGuard
////////////////////////////////////////////////////////////////////////////////

template <class T>
class RefToValue
{
public:

RefToValue(T& ref) : ref_(ref)
{}

RefToValue(const RefToValue& rhs) : ref_(rhs.ref_)
{}

operator T& () const
{
return ref_;
}

private:
// Disable - not implemented
RefToValue();
RefToValue& operator=(const RefToValue&);

T& ref_;
};


////////////////////////////////////////////////////////////////////////////////
/// \ingroup ExceptionGroup
/// RefToValue creator.
////////////////////////////////////////////////////////////////////////////////

template <class T>
inline RefToValue<T> ByRef(T& t)
{
return RefToValue<T>(t);
}

}


#endif // end file guardian

Loading

0 comments on commit 7be01eb

Please sign in to comment.