CrossFramework Library
|
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