CrossFramework Library

XBase/Enum.hpp

説明を見る。
00001 
00006 #if defined(XBASE_INCLUDED_ENUM_HPP)
00007 #else
00008 #define XBASE_INCLUDED_ENUM_HPP
00009 
00010 //------------------------------------------------------------
00011 #include <XBase/BuiltInTypes.hpp>
00012 
00013 //------------------------------------------------------------
00014 namespace XBase {
00016 
00017 
00020     template< typename ENUM_TYPE , typename DATA_TYPE >
00021     struct EnumPODTmpl
00022     {
00023         //============================================================
00024         // private
00025         DATA_TYPE val_;
00026 
00027         //============================================================
00028         // public
00029 
00031 
00032         typedef ENUM_TYPE EnumType;
00033         typedef DATA_TYPE DataType;
00035 
00037 
00038 
00055         EnumPODTmpl< ENUM_TYPE , DATA_TYPE >& operator=( const ENUM_TYPE aVal )
00056         {
00057             val_ = DataType( aVal );
00058             return *this;
00059         }
00060 
00072         operator ENUM_TYPE()const
00073         {
00074             return ENUM_TYPE( val_ );
00075         }
00077     };
00078     
00087     template< typename ENUM_TYPE , typename DATA_TYPE >
00088     class EnumTmpl : public EnumPODTmpl< ENUM_TYPE , DATA_TYPE >
00089     {
00090     public:
00092 
00093 
00094         EnumTmpl()
00095         {
00096             EnumPODTmpl< ENUM_TYPE , DATA_TYPE >::val_ = 0;
00097         }
00098     
00100         EnumTmpl( const ENUM_TYPE aVal )
00101         {
00102             EnumPODTmpl< ENUM_TYPE , DATA_TYPE >::val_ = DataType( aVal );
00103         }
00105     };
00106 
00108 
00109     template< typename ENUM_TYPE > class Enum8  : public EnumTmpl< ENUM_TYPE , s8  > { public: Enum8(){};  Enum8( const ENUM_TYPE aVal )  { EnumTmpl< ENUM_TYPE , s8   >::val_ = s8( aVal ); } };  
00110     template< typename ENUM_TYPE > class Enum16 : public EnumTmpl< ENUM_TYPE , s16 > { public: Enum16(){}; Enum16( const ENUM_TYPE aVal ) { EnumTmpl< ENUM_TYPE , s16  >::val_ = s16( aVal ); } };  
00111     template< typename ENUM_TYPE > class Enum32 : public EnumTmpl< ENUM_TYPE , s32 > { public: Enum32(){}; Enum32( const ENUM_TYPE aVal ) { EnumTmpl< ENUM_TYPE , s32  >::val_ = s32( aVal ); } }; 
00112     template< typename ENUM_TYPE > class Enum64 : public EnumTmpl< ENUM_TYPE , s64 > { public: Enum64(){}; Enum64( const ENUM_TYPE aVal ) { EnumTmpl< ENUM_TYPE , s64  >::val_ = s64( aVal ); } }; 
00113 
00114     template< typename ENUM_TYPE > class Enum : public Enum8< ENUM_TYPE > { public: Enum( const ENUM_TYPE aVal ) { Enum8< ENUM_TYPE >::val_ = aVal; } }; 
00115 
00116 
00118 }
00119 //------------------------------------------------------------
00120 #endif
00121 // EOF
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 マクロ定義