CrossFramework Library

XBase/PODStruct.hpp

説明を見る。
00001 
00006 #if defined(XBASE_INCLUDED_PODSTRUCT_HPP)
00007 #else
00008 #define XBASE_INCLUDED_PODSTRUCT_HPP
00009 
00010 //------------------------------------------------------------
00011 #include <XBase/StaticAssert.hpp>
00012 #include <XBase/TypeTraits.hpp>
00013 
00014 //------------------------------------------------------------
00015 namespace XBase {
00017 
00018 
00022     template< typename T >
00023     struct PODStruct
00024     {
00026         typedef T ValueType; 
00027         
00032         static const ValueType DefaultValue(){ return ValueType(); }
00033         
00038         const ValueType* ptr()const { return &readRef(); }
00039         ValueType*       ptr()      { return &ref(); }     
00040 
00045         const ValueType  get()const { return readRef(); }
00046 
00051         const ValueType& readRef()const { return value_; }
00052         const ValueType& ref()const     { return value_; } 
00053         ValueType&       ref()          { return value_; } 
00054 
00055 
00060         operator const ValueType& ()const { return readRef(); }
00061         
00066         operator ValueType& ()            { return ref(); }
00067         
00068         // 値。直接アクセスすることは想定していない。
00069         ValueType value_;
00070 
00071     private:
00072         XBASE_STATIC_ASSERT( TypeTraits::IsPOD< typename ValueType >::Value );         // POD型のチェック。
00073     };
00075 }
00076 //------------------------------------------------------------
00077 #endif
00078 // EOF
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 マクロ定義