CrossFramework Library

XBase/Pointer.hpp

説明を見る。
00001 
00006 #if defined(XBASE_INCLUDED_POINTER_HPP)
00007 #else
00008 #define XBASE_INCLUDED_POINTER_HPP
00009 
00010 //------------------------------------------------------------
00011 #include <XBase/RuntimeAssert.hpp>
00012 
00013 //------------------------------------------------------------
00014 namespace XBase {
00016 
00017 
00022     template< typename T >
00023     class Pointer
00024     {
00025     public:
00027 
00028         Pointer() : mPtr( 0 ) {}
00029         Pointer( T& aObj ) : mPtr( 0 ) { set( aObj ); }
00031 
00033 
00034         bool isNull()const  { return mPtr == 0; } 
00035         bool isValid()const { return mPtr != 0; } 
00036         T*   get()const     { return mPtr;  } 
00037 
00038         T&   ref()const     
00039         { 
00040             XBASE_POINTER_ASSERT( mPtr );
00041             return *mPtr; 
00042         } 
00044 
00046 
00047 
00048         void reset() 
00049         {
00050             reset( 0 );
00051         }
00053         void reset( T* aPtr ) 
00054         {
00055             mPtr = aPtr; 
00056         }
00061         void set( T& aRef )
00062         {
00063             XBASE_ASSERT( isNull() );
00064             mPtr = &aRef;
00065         }
00070         void unset()
00071         {
00072             unset( ref() );
00073         }
00078         void unset( T& aRef )
00079         {
00080             XBASE_ASSERT( isValid() );
00081             XBASE_ASSERT( mPtr == &aRef );
00082             mPtr = 0;
00083         }
00085 
00087 
00088         T* operator->()const { return get();  } 
00089         T& operator*()const  { return ref(); } 
00090 
00091 
00092     private:
00093         T* mPtr;
00094     };
00096 }
00097 //------------------------------------------------------------
00098 #endif
00099 // EOF
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 マクロ定義