`
cx732cx
  • 浏览: 18746 次
社区版块
存档分类
最新评论

(转载)C++中枚举与字符串相互转换

 
阅读更多

  有的时候我们喜欢使用一些外部的文件保存管理一些配置信息,这些配置文件大多都是文本格式例如ini,xml等,这样方便编辑和管理。因此在使用的过程中必然会遇到各种字符串转换问题。
  最常见的便是将字符串的数字转换为对应的整形(integer)或者浮点(float),如果遇到枚举类型,可能便会想当做是整形来处理,但觉得不是特别理想。如果能有办法直接转换为枚举会方便很多。 一个简单的配置文件: 在C++里面有枚举: 如果对于前面两个数值,可以很简单的读取,例如: 对于后面那个枚举,可能就稍微麻烦一点: 如果直接在配置文件里面不保存"cpp"字符串而直接保存枚举值,这里便可以当整形取出来再做类型转换。不过这样不安全,也不好维护,如果枚举内部的定义发生了变化,外部保存的数据自然也就会失效出错。 C++没有(也不可能会有)反射机制,枚举成员在编译以后也已经变成了纯粹的数值,失去了名字。所以想使用字符串作为搜索依据,必须为枚举保留一份名字信息,例如: 这个字符串数组只能预先写好,无论是手动还是通过工具自动生成。然后可以在这个字符串数组里面搜索目标字符串,将找到的结果下标转换为对应的枚举值即可,例如: 解决方案找到了,随之而来的问题就是如何将枚举与所需要的字符串查找表联系起来。如有多个枚举: 枚举不像类或结构体可以定义自己的成员变量,所以查找表只能在外部定义,通过实例化模板类来将他们相互联系起来。例如: 这定义了一个查找表的模板结构体,然后将之前的代码改造为: 然后便可以实现字符串转枚举的功能: 这样一来,最开始的问题就可以简化为: 有了这种方式,自然枚举反转回字符串也很容易了,就不再赘述了。 转载出处:  http://a.vifix.us/blog/cpp-convert-string-enum
分享到:
评论

相关推荐

    enum_strings:c ++ enum可转换为和从字符串

    枚举字符串C++ 枚举可与字符串相互转换。 源代码是从几个来源收集的,并稍作修改。 代码中引用了原始来源。例子# include " enum_conversions_macro.h "ENUM_CLASS (Day, Monday, Tuesday, Wednesday, Thursday, ...

    C++检测字符串合法性的类(自创)

    同时允许把字符串转换成相应的数据类型, 可用于对用户输入字符串的检验和转换等。 该类允许指定检测哪些内容,如是否超过给定最大值、是否越界等等, 仅用字符串操作来检测,而不是用正则表达式,不过效率蛮高的。 ...

    字符串转换成枚举类型的方法

    字符串可以向int, bool等类型转变,但是字符串是否可以向枚举转变呢?一起看下边的例子

    enumAutoPrint:自动在CPP上打印枚举!

    在CPP文件上定义枚举时,如果不手动添加执行此操作的代码段,就无法打印枚举器字符串-将枚举值转换为字符串,并添加输出流运算符以进行打印。 添加为每个枚举执行此操作的代码是一件痛苦的工作。 CPP枚举自动打印是...

    跨平台 获取本机IP/MAC地址,检测是否内网IP,字符串IP转换成Number地址

    跨平台 获取本机IP/MAC地址,检测是否内网IP,字符串IP转换成Number地址 通过NetBIOS/SNMP/AdaptersInfo定的取得MAC地址。

    Visual C++ 2005入门经典--源代码及课后练习答案

    6.7.2 从字符串中删除空格 268 6.7.3 计算表达式的值 268 6.7.4 获得项值 271 6.7.5 分析数 272 6.7.6 整合程序 274 6.7.7 扩展程序 276 6.7.8 提取子字符串 277 6.7.9 运行修改过的程序 280 6.8 ...

    更好的枚举:C ++编译时枚举在单个头文件中的字符串,迭代

    您可以转换您的枚举,对其进行循环, ,以,并将结果作为模板参数传递给constexpr函数。 所有的反射都可以满足您的元编程需求。 C ++ 98的接口是相同的-您只需要在运行时使用大多数接口即可。 该库确实提供了作用...

    深入理解C++11:C++11新特性解析与应用

    2748.3.1 字符集、编码和Unicode 2748.3.2 C++11中的Unicode支持 2768.3.3 关于Unicode的库支持 2808.4 原生字符串字面量 2848.5 本章小结 286附录A C++11对其他标准的不兼容项目 287附录B 弃用的特性 294附录C ...

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    9.3.4 string类对象和C字符串的相互转换 273 第10章 指针和动态数组 280 10.1 指针 280 10.1.1 指针变量 280 10.1.2 内存管理基础 287 10.1.3 动态变量和自动变量 289 10.1.4 指针的应用 292 10.2 动态数组 ...

    [你必须知道的222个C++语言问题].范立锋.扫描版[ED2000.COM]-第四部分

    本书涵盖了C++与C语言的区别和联系、面向对象的设计思想、C++中的类和对象、继承、多态、指针与字符串、运算符重载、用户自定义数据类型、结构和枚举、类型转换与RTTI、异常处理、标准模板库、通用函数及模板、C++中...

    [你必须知道的222个C++语言问题].范立锋.扫描版[ED2000.COM]-第三部分

    本书涵盖了C++与C语言的区别和联系、面向对象的设计思想、C++中的类和对象、继承、多态、指针与字符串、运算符重载、用户自定义数据类型、结构和枚举、类型转换与RTTI、异常处理、标准模板库、通用函数及模板、C++中...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    *5.6 C++处理字符串的方法——字符串类与字符串变量 5.6.1 字符串变量的定义和引用 5.6.2 字符串变量的运算 5.6.3 字符串数组 5.6.4 字符串运算举例 习题 第6章 指针 6.1 指针的概念 6.2 变量与指针 6.2.1 定义...

    C++ Primer第四版【中文高清扫描版】.pdf

    4.3 C风格字符串 113 4.3.1 创建动态数组 117 4.3.2 新旧代码的兼容 120 4.4 多维数组 122 小结 124 术语 125 第5章 表达式 127 5.1 算术操作符 129 5.2 关系操作符和逻辑操作符 131 5.3 位操作符 134 5.3.1 bitset...

    C++Builder函数库

    FindClass 函数 从输入字符串中返回一个从TPersistent继承的类 FindGlobalComponent 变量 返回一个最高阶的容器类。 GetClass 函数 返回一个已经注册了的从TPersistent继承的类 LineStart 函数 返回下一行的开始...

    C++程序设计综合练习题-程序设计题.doc

    输入任意一个字符串,将其中的大写字母转换成小写字母。 11. 使用枚举常量编写一个程序。从键盘输入1个月份值(1~12),输出该月份属于哪个 季节。 12. &声明一个哺乳动物类,再派生出狗类,完成并测试这两个类,...

    -C++参考大全(第四版) (2010 年度畅销榜

    31.4 宽字符串转换函数 31.5 宽字符数组函数 31.6 多字节/宽字符转换函数 第四部分 标准C++类库 第32章 标准C++I/O类 32.1 I/O类 32.2 I/O头文件 32.3 格式化标记和I/O操作算子 32.4 几个数据类型 32.5 重载运算符...

    非常经典的c++ primer视频教程6-10

    4.3 C风格字符串 4.3.1 创建动态数组 4.3.2 新旧代码的兼容 4.4 多维数组 第5章 表达式 5.1 算术操作符 5.2 关系操作符和逻辑操作符 5.3 位操作符 5.3.1 bitset对象或整型值的使用 5.3.2 将移位操作符用于...

Global site tag (gtag.js) - Google Analytics