涉及枚举类和宏扩展的代码段的含义 我在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它仅指定枚举的备份存储,而不更改其类型
是默认值,所以有点热情。“last”枚举成员非常常见,有助于实现值检查。顺便说一句,“e__str__[i]”看起来是非标准编译器特定扩展。出于好奇,你的工具链是什么?int
是一个多维数组,如e_uustr_uu
inta[][2]={{{1,2},{3,4},{5,6}代码>将是。没有特定的编译器。
enum class type { a, b, c};