可变参数宏与枚举
Posted 力为
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可变参数宏与枚举相关的知识,希望对你有一定的参考价值。
可变参数的宏与枚举结合会产生什么样子的火花?
问题:
有时候定义了枚举需要知道枚举值对应的字符串表达,有点像反射的机制。该如何简洁的实现而又不容易出错?
基础设施
#define ENUM_ENTRY(NAME, VALUE) NAME = VALUE,
#define TOSTRING(ARG) #ARG
#define ENUM_STR_ENTRY(NAME, VALUE) \\
case VALUE: \\
return TOSTRING(NAME); \\
break;
#define ENUM_ENUMERATION(NAME, ITEM_LIST)\\
struct NAME##EnumDef\\
enum Enum ITEM_LIST(ENUM_ENTRY) ;\\
static std::string ToString(const Enum& value) \\
switch (value) \\
ITEM_LIST(ENUM_STR_ENTRY); \\
default: throw std::exception("Invalid Enum"); break;\\
\\
\\
;
应用:
#define PEOPLE_ITEMS(ITEM_DEF, ...)\\
ITEM_DEF(Name, 1)\\
ITEM_DEF(Born, 2)\\
ITEM_DEF(Nation, 3)
ENUM_ENUMERATION(People, PEOPLE_ITEMS)
int main()
PeopleEnumDef::Enum val = PeopleEnumDef::Nation;
std::cout << PeopleEnumDef::ToString(val);
return 0;
以上是关于可变参数宏与枚举的主要内容,如果未能解决你的问题,请参考以下文章
W6-junit泛型枚举增强for可变参数反射[JavaWeb]