add pimple/rimpl idiom
git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@471 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
parent
4acc1f5923
commit
264e205030
2 changed files with 342 additions and 0 deletions
70
include/loki/PimplDef.h
Executable file
70
include/loki/PimplDef.h
Executable file
|
@ -0,0 +1,70 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
// The Loki Library
|
||||
// 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 author makes no representations about the
|
||||
// suitability of this software for any purpose. It is provided "as is"
|
||||
// without express or implied warranty.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
#ifndef LOKI_PIMPLDEF_H
|
||||
#define LOKI_PIMPLDEF_H
|
||||
|
||||
#include <loki/Pimpl.h>
|
||||
|
||||
namespace Loki
|
||||
{
|
||||
template
|
||||
<
|
||||
class Impl,
|
||||
class Ptr,
|
||||
template<class> class Del
|
||||
>
|
||||
inline
|
||||
PimplLife<Impl,Ptr,Del>::PimplLife() //: ptr(Ptr()) this owerwrites the pointer to PtrImpl
|
||||
{} // when using DeclaredRimpl!!
|
||||
|
||||
template
|
||||
<
|
||||
class Impl,
|
||||
class Ptr,
|
||||
template<class> class Del
|
||||
>
|
||||
inline
|
||||
PimplLife<Impl,Ptr,Del>::~PimplLife()
|
||||
{
|
||||
Del<Ptr>::Destroy( ptr );
|
||||
}
|
||||
|
||||
template
|
||||
<
|
||||
class Impl,
|
||||
class Ptr,
|
||||
template<class> class Del
|
||||
>
|
||||
template<class T>
|
||||
inline
|
||||
PimplLife<Impl,Ptr,Del>::operator T&()
|
||||
{
|
||||
ptr = Ptr( new Impl );
|
||||
return *ptr;
|
||||
}
|
||||
|
||||
template
|
||||
<
|
||||
class Impl,
|
||||
class Ptr,
|
||||
template<class> class Del
|
||||
>
|
||||
inline
|
||||
Ptr
|
||||
PimplLife<Impl,Ptr,Del>::Create()
|
||||
{
|
||||
ptr = Ptr( new Impl );
|
||||
return ptr;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue