c++ - 在 C++ 中将 char * 转换为枚举

标签 c++ c enums

我想将 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_mapstring 到您的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/

相关文章:

c++ - C++ 中的模函数,其行为类似于 matlab 中的模

c++ - 调整大小时如何更新 WC_EDIT 控件边距

c++ - Haskell Thrift 库在性能测试中比 C++ 慢 300 倍

用于创建位域定义的 C 宏

c# - 可以在 Linq-to-SQL 的多个实体中使用相同的 Enum 吗?

c++ - 基于 OO 的 C++ 库的 C 和 C++ 接口(interface)

具有零大小数组成员的 C 结构体

c - gtk+ 文本编辑器 vim 类型模式(插入/命令)

vba - 如何将所有类硬编码值保存在一个地方

java - 枚举实现接口(interface)被 validator 拒绝 (java.lang.VerifyError)