boost之lexical_cast
第一次翻译,虽然是个很简单的函数介绍...
文件boost/lexical_cast.hpp中定义了此函数:
- namespace boost
- {
- class bad_lexical_cast;
- template<typename Target, typename Source>
- Target lexical_cast(const Source& arg);
- template <typename Target>
- Target lexical_cast(const AnyCharacterType* chars, std::size_t count);
- }
第一种形式:
输出流参数的结果到一个基于字符串的标准库流中,并返回为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的样例
- #include "iostream"
- #include "boost/lexical_cast.hpp" // 需要包含的头文件
- using boost::lexical_cast;
- using boost::bad_lexical_cast;
- using namespace std;
- int main()
- {
- char* p="32768";
- int i=0;
- try
- {
- i=lexical_cast<int>(p); // 将字符串转化为整数
- }
- catch(bad_lexical_cast&) // 转换失败会抛出一个异常
- {
- i=0;
- }
- cout << i << endl;
- return i;
- }
【http://www.habadog.com/2011/05/07/boost-lexical_cast-intro/】
boost之lexical_cast的更多相关文章
- boost-使用format和lexical_cast实现数字和字符串之间的转换
使用boost的format可以实现数字到string的格式化转换,boost的lexical_cast可以实现string到数值的转换,eg: #include "boost/format ...
- c++11实现一个简单的lexical_cast
boost中有一个lexical_cast可以用统一的方式来做基本类型之间的转换,比如字符串到数字,数字到字符串,bool和字符串及数字之间的相互转换.boost::lexical_cast的用法比较 ...
- 一起做RGB-D SLAM 第二季 (二)
本节目标 我们要实现一个基本的文件IO,用于读取TUM数据集中的图像.顺带的,还要做一个参数文件的读取. 设计参数文件读取的类:ParameterReader 首先,我们来做一个参数读取的类.该类读取 ...
- 程序退出异常_DebugHeapDelete和std::numpunct
前几天程序新加一个功能之后,其中用到了boost的lexical_cast<float>,发现在关闭命令行窗口的时候,程序报错,是程序退出清理时候报的错误. 一开始以为是程序新增的功能有问 ...
- 写一个Windows上的守护进程(4)日志其余
写一个Windows上的守护进程(4)日志其余 这次把和日志相关的其他东西一并说了. 一.vaformat C++日志接口通常有两种形式:流输入形式,printf形式. 我采用printf形式,因为流 ...
- boost-字符文本处理
1.lexical_cast 一些常见的数值,字符互转函数: 整型int: itoa()._itoa_s atoi()._ttoi 无符号整型unsigned int: _ultoa_s()._ult ...
- boost/lexical_cast.hpp的简单使用方法_行动_新浪博客
boost/lexical_cast.hpp的简单使用方法_行动_新浪博客 boost/lexical_cast.hpp的简单使用方法 (2010-03-19 16:31:13) ...
- boost.lexical_cast 学习
1,字符串 到 数值类型的转换 2,数值 到 字符串的转换 3,异常处理情况 4,boost::lexical_cast 的原型: template<typename Target, typen ...
- boost 学习笔记 1: lexical_cast
参考原著地址:http://einverne.github.io/post/2015/12/boost-learning-note-1.html 转换对象要求 lexical_cast 对转换对象有如 ...
随机推荐
- WordPress目录文件结构详细说明
根目录 |-wp-admin | |-css | |-images | |-includes | |-js | |-maint | |-network | |-user |-wp-content | ...
- 虚拟机装系统出现 ntldr is missing(NTLDR丢失)、无法正常开机、解决方法
虚拟机(VMware Workstation或Hyper-V)装ghost版系统提示“ntldr is missing Press Ctrl+Alt+del to Resta 此方法对实体机.虚拟机安 ...
- Linux 下系统调用的三种方法
系统调用(System Call)是操作系统为在用户态运行的进程与硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口.当用户进程需要发生系统调用时,CPU 通过软中断切换到内核态开始执行内核系 ...
- C++11 之 并发编程 (一)
未来芯片制造,如果突破不了 5nm 极限,则 CPU 性能的提升,可能会依赖于三维集成技术,将多个 CPU 核集成在一起,使得多核系统越来越普遍. 以前的 C++ 多线程,一是受限于平台,多借助于封装 ...
- HTML ------ 关于表单 Form
Form(表单)主要用于采集和提交用户输入的信息,是页面与WEB服务器交互过程中 最重要的信息来源. 掌握表单(Form)有以下几个要点: 重要form属性 form常用控件 form提交方式 § 重 ...
- POJ3160 Father Christmas flymouse[强连通分量 缩点 DP]
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3241 Accep ...
- Hibernate 分组查询 子查询 原生SQL
分组查询: 使用group by关键字对数据分组,使用having关键字对分组数据设定约束条件,从而完成对数据分组和统计 1.1 聚合函数:常被用来实现数据统计功能 ① count() 统计记录条数 ...
- 第4章 Java接收用户输入
第4章 Java接收用户输入 1.输入 使用Scanner工具类可以换取用户输入的数据Scanner类位于java.util包中,使用时需要导入此包使用步骤: 1.导入java.util.Scanne ...
- Win10系统出问题?简单一招即可修复win10!
时至今日,win10系统的普及率越来越高,在微软多种策略的强推下,10月份win10系统的市场份额已达22.59%,但win10系统也不是完美的,总有些还是会出现一些诸如打开应用程序出现闪退.乱码.总 ...
- linux dd 命令详解
dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 名称: dd 使用权限: 所有使用者dd 这个指令在 manual 里的定义是 ...