1. 程式人生 > >封裝C++的enum,並設定enum的名字

封裝C++的enum,並設定enum的名字

/*!  * \b Date: 2014-07-30  *  * \b Description: 將enum封裝在struct中,並且設定enum的名字  * 用法:  *  型別定義,為了與陣列中的名字對應,元素值應該用系統預設的設定,從0開始  *  DECLARE_MV_ENUM(FileShare, 2)  *   Read,  *   Write,  *  END_DECLARE_MV_ENUM()  *  *  實現部分,需要與定義中相應元素位置一一對應  *  IMPLEMENT_MV_ENUM(E)  *   "Read",  *   "Write"  *  END_IMPLEMENT_MV_ENUM()  *  *  @param E 型別名  *  @param S 元素的個數  *  */ #define DECLARE_MV_ENUM(E, S) \ struct E \ { \ private: \  static std::string name_list_[];\ public: \   E(const int type = 0) : type_((Type)type) { \   } \   E(const E& rhs) : type_(rhs.type_) { \   } \   E& operator=(const E& rhs) { \     if(this != &rhs) {\       this->type_ = rhs.type_; \     } \     return *this; \   } \   E& operator=(const int type) { \     this->type_ = (Type)type; \     return *this; \   } \   bool operator==(const E& rhs) const { \     return type_ == rhs.type_; \   } \   operator int() const { \     return this->type_; \   } \   const std::string& GetName() const{\    return name_list_[type_]; \   } \   static const int SIZE = S;\   enum Type \   {

#define END_DECLARE_MV_ENUM() \   }; \   static const std::string& GetName(const Type type) { \     return name_list_[type]; \   } \   bool operator==(const Type& type) const { \     return type_ == type; \   } \   private: \     Type type_; \ };

#define IMPLEMENT_MV_ENUM(E) \   std::string E::name_list_[] = \   {

#define END_IMPLEMENT_MV_ENUM() \   };