封裝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() \ };