第一次翻译,虽然是个很简单的函数介绍...

文件boost/lexical_cast.hpp中定义了此函数:

  1. namespace boost
  2. {
  3. class bad_lexical_cast;
  4. template<typename Target, typename Source>
  5. Target lexical_cast(const Source& arg);
  6. template <typename Target>
  7. Target lexical_cast(const AnyCharacterType* chars, std::size_t count);
  8. }

第一种形式:

输出流参数的结果到一个基于字符串的标准库流中,并返回为Target对象。如果Target是 std::string或者std::wstring,则输入流将提取字符串的全部内容,包括空格,而不是使用操作符operator>>的默认行为。如果lexical_cast转换错误,将抛出bad_lexical_cast异常。

第二种形式:

大小为count的数组作为输入参数,转换返回Target对象。如果lexical_cast转换错误,将抛出bad_lexical_cast异常。这种形式可能对处理非0结尾的字符串数组或字符数组的某一部分很有用。

要求:

1. Source必须是一个可以输出到输出流的类型(OutputStreamable),也就是Source类型定义了operator<<操作符:一个std::ostream或者std::wostream对象在其左边,参数类型实例在右边

2. Target必须是一个可以输入到输入流的类型(InputStreamable),也就是该类型定义了operator>>操作符

3. Target定义了拷贝构造函数(CopyConstructible )

4. Target定义了默认构造函数(DefaultConstructible)

【http://www.boost.org/doc/libs/1_53_0/doc/html/boost_lexical_cast/synopsis.html#boost_lexical_cast.synopsis.lexical_cast】

------------------------------------------------------------------------------------------------

其他资料:

一、lexical_cast的作用
lexical_cast使用统一的接口实现字符串与目标类型之间的转换。

二、lexical_cast与c/c++提供类似接口的比较
标准c家族中包含此类函数,例如atoi与itoa等,它们的缺点是:
(1)各个转换都是单向的,双向转换为不同函数,各种转换函数不同,接口众多;
(2)仅支持基础数据类型的子集,如int,long,double;
(3)不能提供统一的接口,易用性差;

c++中提供了stringstream,使用它进行格式转换可读性较差,使用起点较高,只是简单的转换,stringstream太重量级。

boost提供了lexical_cast,使用统一接口形式实现任意类型之间的转换,增强了易用性。但如果需要严密控制精度的转换,仍然推荐使用stringstream;数值之间的转换,推荐使用numeric_cast。

三、lexical_cast的样例

  1. #include "iostream"
  2. #include "boost/lexical_cast.hpp" // 需要包含的头文件
  3. using boost::lexical_cast;
  4. using boost::bad_lexical_cast;
  5. using namespace std;
  6. int main()
  7. {
  8. char* p="32768";
  9. int i=0;
  10. try
  11. {
  12. i=lexical_cast<int>(p); // 将字符串转化为整数
  13. }
  14. catch(bad_lexical_cast&)    // 转换失败会抛出一个异常
  15. {
  16. i=0;
  17. }
  18. cout << i << endl;
  19. return i;
  20. }

【http://www.habadog.com/2011/05/07/boost-lexical_cast-intro/】

boost之lexical_cast的更多相关文章

  1. boost-使用format和lexical_cast实现数字和字符串之间的转换

    使用boost的format可以实现数字到string的格式化转换,boost的lexical_cast可以实现string到数值的转换,eg: #include "boost/format ...

  2. c++11实现一个简单的lexical_cast

    boost中有一个lexical_cast可以用统一的方式来做基本类型之间的转换,比如字符串到数字,数字到字符串,bool和字符串及数字之间的相互转换.boost::lexical_cast的用法比较 ...

  3. 一起做RGB-D SLAM 第二季 (二)

    本节目标 我们要实现一个基本的文件IO,用于读取TUM数据集中的图像.顺带的,还要做一个参数文件的读取. 设计参数文件读取的类:ParameterReader 首先,我们来做一个参数读取的类.该类读取 ...

  4. 程序退出异常_DebugHeapDelete和std::numpunct

    前几天程序新加一个功能之后,其中用到了boost的lexical_cast<float>,发现在关闭命令行窗口的时候,程序报错,是程序退出清理时候报的错误. 一开始以为是程序新增的功能有问 ...

  5. 写一个Windows上的守护进程(4)日志其余

    写一个Windows上的守护进程(4)日志其余 这次把和日志相关的其他东西一并说了. 一.vaformat C++日志接口通常有两种形式:流输入形式,printf形式. 我采用printf形式,因为流 ...

  6. boost-字符文本处理

    1.lexical_cast 一些常见的数值,字符互转函数: 整型int: itoa()._itoa_s atoi()._ttoi 无符号整型unsigned int: _ultoa_s()._ult ...

  7. boost/lexical_cast.hpp的简单使用方法_行动_新浪博客

    boost/lexical_cast.hpp的简单使用方法_行动_新浪博客     boost/lexical_cast.hpp的简单使用方法    (2010-03-19 16:31:13)    ...

  8. boost.lexical_cast 学习

    1,字符串 到 数值类型的转换 2,数值 到 字符串的转换 3,异常处理情况 4,boost::lexical_cast 的原型: template<typename Target, typen ...

  9. boost 学习笔记 1: lexical_cast

    参考原著地址:http://einverne.github.io/post/2015/12/boost-learning-note-1.html 转换对象要求 lexical_cast 对转换对象有如 ...

随机推荐

  1. docker-9 supervisord 参考docker从入门到实战

    参考docker从入门到实战 使用 Supervisor 来管理进程 Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机 ...

  2. 浅谈Service层为何要有接口

    被人随意问了一句,为何每个service层都要写一个接口呢,多麻烦~虽然想说点什么,但是又不知道从何说起,只好从新整理一下思绪. 情景1:在开源框架中有很多这种情况,就是某个功能支持用户自定义扩展.说 ...

  3. hdu-5992 Finding Hotels(kd-tree)

    题目链接: Finding Hotels Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 102400/102400 K (Java/ ...

  4. google的云盘与公司网盘

    很多人都很期待Google推出的云存储服务,也就是公司网盘.因为多数人相信,没有比google更适合做云存储的公司了,作为一个标准的Web公司或者说互联网公司,云端理所应当的优秀.但比起几年前听传言时 ...

  5. Struts2文件上传和文件下载

    一.单个文件上传 文件上传需要两个jar包: 首先制作一个简单的页面,用于实现文件上传 <h1>单个文件上传</h1> <s:form action="uplo ...

  6. 脏检查and刷新机构

    ---恢复内容开始--- 脏检查:当食物提交时,Hiberante会对Session中持久状态的对象进行加测,判断对象的数据是否发生了变化 为什么要进行脏检查?, 解析:如果对象发生了改变,就需要将改 ...

  7. Metasploit爆破tcpwrapped服务

    转自:http://www.mamicode.com/info-detail-1653722.html 一.利用nmap工具扫描目标主机 1.1 使用nmap命令对目标主机进行扫描. 1.2 在终端中 ...

  8. 使用gulp工具生成svgsprites

    简介 SVG即可缩放矢量图形 (Scalable Vector Graphics)的简称, 是一种用来描述二维矢量图形的XML标记语言. SVG图形不依赖于分辨率, 因此图形不会因为放大而显示出明显的 ...

  9. sql case 用法总结

    快下班了,抽点时间总结一下sql 的 case 用法. sql 里的case的作用: 用于计算条件列表的表达式,并返回可能的结果之一.sql 的case 类型于编程语言里的 if-esle if-el ...

  10. 淘宝WAP版小BUG分析

    前几天发现的一个淘宝WAP版的小BUG,就是用桌面版chrome看的时候产品评价中的图片显示不出来,都是图裂了. 这是什么原因呢?图片为什么会显示不出来呢?淘宝的技术人员.测试人员不可能没发现啊.开启 ...