我想将 char *
转换为 enum
所以我使用了 this .但是我在将 char *
转换为 enum
我无法更改我的enum
。此外,type[]
是动态的,为了简化我显示的是静态值。
enum type_t {
MSG_1 = 0,
MSG_2
};
char type[] = "MSG_1|MSG_2";
char *type_char;
type_char = strtok (type,"|");
while (type_char != NULL)
{
type_t type_enum = static_cast<type_t >(type_char );
type_char = strtok (NULL, "|;");
}
我遇到了以下错误
error: invalid static_cast from type 'char*' to type 'type_t'
我想将 char *
转换为 enum
最佳答案
与其他具有更强运行时“反射”能力的语言不同,在 C++ 中,enum
是纯粹的编译时工件。一旦编译器完成,就没有办法获得枚举常量的名称。调试器可以通过读取编译器为调试器准备的特殊表来获取它们,但访问这些文件会适得其反。
如果您希望能够将枚举的名称转换为它们的值,请制作一个unordered_map
从string
到您的enum
,填充它静态地,并根据需要执行查找:
static std::unordered_map<std::string,type_t> nameToTypeT;
...
nameToTypeT["MSG_1"] = MSG_1;
nameToTypeT["MSG_2"] = MSG_2;
...
type_t = nameToTypeT[std::string(type_char)];
关于c++ - 在 C++ 中将 char * 转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28595206/