- 浏览: 19092 次
最新评论
有的时候我们喜欢使用一些外部的文件保存管理一些配置信息,这些配置文件大多都是文本格式例如ini,xml等,这样方便编辑和管理。因此在使用的过程中必然会遇到各种字符串转换问题。
最常见的便是将字符串的数字转换为对应的整形(integer)或者浮点(float),如果遇到枚举类型,可能便会想当做是整形来处理,但觉得不是特别理想。如果能有办法直接转换为枚举会方便很多。 一个简单的配置文件: 在C++里面有枚举: 如果对于前面两个数值,可以很简单的读取,例如: 对于后面那个枚举,可能就稍微麻烦一点: 如果直接在配置文件里面不保存"cpp"字符串而直接保存枚举值,这里便可以当整形取出来再做类型转换。不过这样不安全,也不好维护,如果枚举内部的定义发生了变化,外部保存的数据自然也就会失效出错。 C++没有(也不可能会有)反射机制,枚举成员在编译以后也已经变成了纯粹的数值,失去了名字。所以想使用字符串作为搜索依据,必须为枚举保留一份名字信息,例如: 这个字符串数组只能预先写好,无论是手动还是通过工具自动生成。然后可以在这个字符串数组里面搜索目标字符串,将找到的结果下标转换为对应的枚举值即可,例如: 解决方案找到了,随之而来的问题就是如何将枚举与所需要的字符串查找表联系起来。如有多个枚举: 枚举不像类或结构体可以定义自己的成员变量,所以查找表只能在外部定义,通过实例化模板类来将他们相互联系起来。例如: 这定义了一个查找表的模板结构体,然后将之前的代码改造为: 然后便可以实现字符串转枚举的功能: 这样一来,最开始的问题就可以简化为: 有了这种方式,自然枚举反转回字符串也很容易了,就不再赘述了。 转载出处: http://a.vifix.us/blog/cpp-convert-string-enum
发表评论
-
awk教程
2012-07-06 09:45 618一个年轻的程序员问一个老程序员(一个比较牛逼的公司的CTO ... -
正则表达式中附加参数的用法
2012-07-06 09:38 632附件参数g的用法: 1)对于表达式对象的exec方法, ... -
asp.net gridview美化
2012-07-06 09:30 1288i am now in university(HIT@We ... -
javascript js 删除表格的行、单元列
2012-07-05 20:45 659大发现,大家在贴代码的时候。系统会自动加上一些代码或注释之 ... -
具有可过滤功能的JList组件【Swing】
2012-07-03 13:44 806【场景】:在一个列表中,可以通过输入某个字符,而动态过滤列 ... -
Flex应用程序背景颜色渐变
2012-07-02 12:29 632今天突然看见CSDN一个美女高手写的小东西,发现Flex背 ... -
Flex操作Json数据示例
2012-07-02 12:29 698Flex操作Json数据示例 本示例中需要用到JSO ... -
FLEX4中 获取JSON数据的一个例子
2012-07-02 12:29 805公司要求使用JSON格式来获取服务器端的数据 通过 ... -
Flex获取操作XML示例
2012-07-02 12:28 539/****** ".",&qu ... -
Flex 4 Canvas backgroundImage 问题
2012-07-02 12:28 756倾听,慎言,勇行,自省... ... -
GNU Make 中文手册v3.8 学习 ( 3/3 )
2012-07-01 10:05 1030GNU Make 中文手册v3.8 学习 ( 3/3 ) ... -
Web前端开发之“常见模块你真的很了解吗?”
2012-07-01 10:05 759标题和内容模 ... -
Lex和yacc工具介绍
2012-07-01 10:05 930在编译过程中,词 ... -
谈谈我对未来的想法吧
2012-07-01 10:05 695来总行珠海研发中 ... -
终于搞清楚了Flex到底是收费还是免费
2012-06-30 16:30 1629终于搞清楚了Flex到底是收费还是免费 2010年06月29 ... -
结合实际项目谈谈Extjs、Flex、Jquery等富因特网时代框架的用武之处
2012-06-30 16:30 687结合实际项目谈谈Extjs ... -
全面认识Flex安全沙箱
2012-06-30 16:30 620全面认识Flex安全沙箱 2 ... -
为Flex应用添加实时组件
2012-06-30 16:30 468为Flex应用添加实时组件 2011年06月30日 在很 ... -
Flex socket通信实践学习笔记(2)-1
2012-06-30 16:30 632Flex socket通信实践学习 ...
相关推荐
枚举字符串C++ 枚举可与字符串相互转换。 源代码是从几个来源收集的,并稍作修改。 代码中引用了原始来源。例子# include " enum_conversions_macro.h "ENUM_CLASS (Day, Monday, Tuesday, Wednesday, Thursday, ...
同时允许把字符串转换成相应的数据类型, 可用于对用户输入字符串的检验和转换等。 该类允许指定检测哪些内容,如是否超过给定最大值、是否越界等等, 仅用字符串操作来检测,而不是用正则表达式,不过效率蛮高的。 ...
但在某些场景下,如处理从外部源接收的数据,如服务器传递的字符串,我们可能需要将字符串转换为枚举。以下是如何实现这一目标的方法。 首先,我们要明确枚举的基本定义。在C#中,枚举定义如下: ```csharp public...
可能还包括了对C风格字符串(`char*`)与自定义字符串类之间的转换函数。 4. **main.cpp**:这是程序的主入口文件,通常会包含一些测试用例,用来验证自定义字符串类的功能是否正确。这些测试用例可能包括创建字符...
在C++编程中,有时我们需要将字符串转换为数值类型,如整型、浮点型等,反之亦然。Boost库提供了一个非常实用的工具——`lexical_cast`,它简化了这个过程,使得转换更加安全和方便。本篇将详细介绍Boost库中的`...
(2)转换限制,强类型枚举成员的值不可以与整型发生隐式相互转换。 (3)可以指定底层类型。强类型枚举默认的底层类型是int,但也可以显示地指定底层类型。 例如: enum class Type:char{Low,Middle,High}; ...
`ToLower()`和`ToUpper()`方法分别用于将字符串转换为小写和大写。 ```csharp myString = myString.ToLower(); // All characters converted to lowercase myString = myString.ToUpper(); // All characters ...
2. **字符串到枚举值转换**:`magic_enum::enum_value(str)`则可以将字符串转换回枚举值,如果字符串不匹配任何枚举值,该函数会抛出异常。 3. **枚举值迭代**:`magic_enum::enum_values()`返回一个范围(range)...
在CPP文件上定义枚举时,如果不手动添加执行此操作的代码段,就无法打印枚举器字符串-将枚举值转换为字符串,并添加输出流运算符以进行打印。 添加为每个枚举执行此操作的代码是一件痛苦的工作。 CPP枚举自动打印是...
本文将深入探讨如何在不同的操作系统上获取本机的IP和MAC地址,以及如何判断一个IP地址是否为内网IP,并将字符串形式的IP地址转换为数值表示。我们将主要关注以下几个知识点: 1. **跨平台获取本机IP地址**: 跨...
在C#中,字符串(`string`)不能直接与C++中的`char*`或`char**`对应。因此,需要借助`Encoding`类来实现转换。 #### 输入参数转换 输入参数通常是一个字符串数组,在C#中表示为`string[]`。首先,使用`Encoding....
第七段代码`str_to_int`函数演示了如何将字符串转换为整数。通过遍历字符串,逐位计算数字的值,并累积到结果`n`中。 6. 子字符串查找: `find_substr`函数在第八段代码中,实现了在一个字符串中查找子字符串的功能...
本章主要讲解了C++中数组与指针的相关知识,包括数组的定义、多维数组的概念以及指针的基本使用等。通过上述知识点的学习,可以帮助读者更好地理解和掌握C++中数组与指针的使用技巧。在实际编程过程中,合理利用数组...
教程将解释如何进行字符串转换和格式化。 12. 枚举(Enumerations):在C++/CLI中可以定义枚举类型,它们在托管代码中表示为System::Enum类型。 13. 类型转换(Type Casts):包括显式和隐式类型转换,以及C++/CLI...
- `char*`在C++中表示指向一个字符串的指针,在C#中使用`System.String`类型表示字符串。 - **LPWSTR (wchar_t*) - System.String** - `wchar_t*`在C++中表示宽字符指针,通常用于宽字符串,在C#中同样使用`...
本书还涉及了C++中系统string类的使用,这是一个预先定义好的类,用于处理字符串,它提供了一系列的成员函数来处理字符串数据。C++之父Bjarne Stroustrup对于C程序员提出的建议部分,则可能会包含如何有效地从C过渡...
- 系统string类:提供了灵活的字符串处理方法。 3. 封装:封装是面向对象编程的重要特性,它通过使用struct和class实现数据和操作的封装,隐藏了对象的内部实现细节,只暴露了必要的接口。 4. 类与对象:C++中的...
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 ...