使用地图将字符串与枚举连接
Using map to connect string with enum
i创建了将枚举与字符串连接起来的地图,以便使执行当前项目的时间更轻松。代码看起来像这样:
struct responseMap : public std::map < std::string, CitizenType > {
responseMap() {
this->operator[]("slave") = CitizenType::slave;
this->operator[]("trader") = CitizenType::trader;
this->operator[]("priest") = CitizenType::priest;
this->operator[]("scholar") = CitizenType::scholar;
this->operator[]("soldier") = CitizenType::soldier;
this->operator[]("archer") = CitizenType::archer;
this->operator[]("swordsman") = CitizenType::swordsman;
this->operator[]("emperor") = CitizenType::emperor;
}
};
我的枚举只是地图中描述的这些类型。一切都很好,它不将"从"视为地图的成员。例如,如果我写下以下代码:
responseMap myMap;
std::cout<<myMap["slave"]<<" "<<myMap["trader"];
它将产生以下行:0 1
我的问题是为什么我以同样的方式描述它们?
编辑:我正在使用这样的普通地图尝试:
std::map<std::string, CitizenType> otherMap = {
{ "slave", CitizenType::slave },
{ "trader", CitizenType::trader },
{ "priest", CitizenType::priest },
{ "scholar", CitizenType::scholar },
{ "soldier", CitizenType::soldier },
{ "archer", CitizenType::archer },
{ "swordsman", CitizenType::swordsman },
{ "emperor", CitizenType::emperor },
};
它仍然输出相同的值。
如果您没有以不同的方式设置它,则enum
将从0索引 - 因此它不忽略您的价值,您的值为0。部分关于"如果第一个枚举者没有初始化器,则关联的值为零。对于任何其他枚举没有初始化器的枚举器,关联的值是上一个枚举器加一个的值。"
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- 用于枚举绑定但未连接的套接字的 API
- 使用地图将字符串与枚举连接
- 如何使用QT5中的lambdas将具有int参数的信号连接到具有枚举参数with的插槽