涉及枚举类和宏扩展的代码段的含义 我在C++中遇到下面的代码。我不熟悉这门语言,也不熟悉语法

涉及枚举类和宏扩展的代码段的含义 我在C++中遇到下面的代码。我不熟悉这门语言,也不熟悉语法,c++,enum-class,C++,Enum Class,我了解宏扩展和枚举类的基本知识。 我了解到带有参数x1,x2,…,xn的宏etokenize将替换为#x1,#x2,…#xn。函数s_tolower将std::string中的每个字符更改为小写 #define DECL_ENUM_FUNCS(e) inline const char* enum2str(e e1){ return e##__str__[static_cast<int>(e1)]; } \

我了解宏扩展和枚举类的基本知识。 我了解到带有参数
x1,x2,…,xn
的宏
etokenize
将替换为
#x1,#x2,…#xn
。函数
s_tolower
std::string
中的每个字符更改为小写

#define DECL_ENUM_FUNCS(e)        inline const char* enum2str(e e1){ return e##__str__[static_cast<int>(e1)]; } \
                                inline bool str2enum(const std::string& s,e& e1){for(int i=0;i<static_cast<int>(e::End);i++){ if( s==e##__str__[i] ){e1=static_cast<e>(i);return true;} } e1=e::End; return false; } \
                                inline bool str2enumI(const std::string& s,e& e1){for(int i=0;i<static_cast<int>(e::End);i++){ if( s_tolower(s)==s_tolower(e##__str__[i]) ){e1=static_cast<e>(i);return true;} } e1=e::End; return false; } \
                                inline std::ostream& operator<<(std::ostream& o, e const & in_) { o << e##__str__[static_cast<int>(in_)]; return o; }

#define DECL_ENUM(e,x1,...) enum class e : int { x1=0, __VA_ARGS__, End }; const char e##__str__[][256] = {#x1, etokenize(__VA_ARGS__), "Invalid"}; DECL_ENUM_FUNCS(e)
将与

enum class type { a, b, c};

我说的对吗?

不,对于
enum类
部分,您遗漏了两件事:

  • 该类型设置为
    int
  • 然后将
    End
    值添加到末尾
然后定义效用函数:

  • 将枚举值转换为其字符串表示形式:
    type::a
    -->
    'a'
  • 查找与字符串对应的枚举值:
    'a'
    -->
    类型::a
  • 通过忽略大小写来识别:
    'A'
    -->
    类型::A

  • 将文本表示形式打印到
    std::ostream
    std::cout它仅指定枚举的备份存储,而不更改其类型
    int
    是默认值,所以有点热情。“last”枚举成员非常常见,有助于实现值检查。顺便说一句,“e__str__[i]”看起来是非标准编译器特定扩展。出于好奇,你的工具链是什么?
    e_uustr_uu
    是一个多维数组,如
    inta[][2]={{{1,2},{3,4},{5,6}将是。没有特定的编译器。
    
    enum class type { a, b, c};