通过预处理器创建 std::pair<std::string, some_enum>
Create std::pair<std::string, some_enum> via preprocessor
我有一个 const static std::map,我想用预处理器填充它。我想要我的枚举和枚举类型的字符串名称之间的映射。例如:
enum Color {
RED,
BLUE,
GREEN
};
const static std::map<std::string, Color> = {
{"RED", Color::RED},
{"red", Color::RED},
{"BLUE", Color::BLUE},
{"blue", Color::BLUE},
{"GREEN", Color::GREEN}
{"green", Color::GREEN}
};
这是一个简单的例子。我想写这样的东西:
enum Color {
RED,
BLUE,
GREEN
};
const static std::map<std::string, Color> = {
CREATE(RED),
CREATE(BLUE),
CREATE(GREEN)
};
我的枚举中有很多值,你会看到这是很多工作,即使是几个值。
我想过使用一些预处理器魔法,但我不知道如何让它工作。我的第一个想法是:
#define(name) {"name", Color::name}
我的第二个想法是:
#define(name) {"(name)", Color::(name)}
在第一种情况下,我将字符串 "name" 作为键,在第二种情况下,我将字符串“(name)”作为键,并且由于我的值而导致编译器错误。如果能找到这个问题的解决方案就太好了,即使这不包括字符串的小写版本。那只是一个小红利。
你有什么想法可以解决我的问题吗?
编辑:感谢@Gem Taylor。我有第一个问题的解决方案:
#define CREATE(name) {#name, Color::name}
如果您知道如何使用小写字符串创建版本,那就太好了。这样:
CREATE(RED)
将创建:
{"RED", Color::RED}, {"red", Color::RED}
谢谢
宏 # 中有一个特殊的 stringifier 功能,还有标记连接 ## :
#define CREATE(name) {#name, Color::name}
请参阅 the gcc docs - 这是 C 的标准功能。
我有一个 const static std::map,我想用预处理器填充它。我想要我的枚举和枚举类型的字符串名称之间的映射。例如:
enum Color {
RED,
BLUE,
GREEN
};
const static std::map<std::string, Color> = {
{"RED", Color::RED},
{"red", Color::RED},
{"BLUE", Color::BLUE},
{"blue", Color::BLUE},
{"GREEN", Color::GREEN}
{"green", Color::GREEN}
};
这是一个简单的例子。我想写这样的东西:
enum Color {
RED,
BLUE,
GREEN
};
const static std::map<std::string, Color> = {
CREATE(RED),
CREATE(BLUE),
CREATE(GREEN)
};
我的枚举中有很多值,你会看到这是很多工作,即使是几个值。 我想过使用一些预处理器魔法,但我不知道如何让它工作。我的第一个想法是:
#define(name) {"name", Color::name}
我的第二个想法是:
#define(name) {"(name)", Color::(name)}
在第一种情况下,我将字符串 "name" 作为键,在第二种情况下,我将字符串“(name)”作为键,并且由于我的值而导致编译器错误。如果能找到这个问题的解决方案就太好了,即使这不包括字符串的小写版本。那只是一个小红利。 你有什么想法可以解决我的问题吗?
编辑:感谢@Gem Taylor。我有第一个问题的解决方案:
#define CREATE(name) {#name, Color::name}
如果您知道如何使用小写字符串创建版本,那就太好了。这样:
CREATE(RED)
将创建:
{"RED", Color::RED}, {"red", Color::RED}
谢谢
宏 # 中有一个特殊的 stringifier 功能,还有标记连接 ## :
#define CREATE(name) {#name, Color::name}
请参阅 the gcc docs - 这是 C 的标准功能。