Boost C++ 库

...世界范围内最受尊敬和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

Next

第 1 章。 Boost.Convert 2.0

Vladimir Batov

根据 Boost 软件许可 1.0 版发布。请访问 https://boost.ac.cn/LICENSE_1_0.txt 查看副本。

目录

理由
简介
入门
基本部署
灵活性和对变化的适应性
基本转换失败检测
更好的错误检测
默认转换器
替代接口
转换器
用户定义类型的集成
Boost.Convert 与标准算法
性能
转换器比较
Boost.Convert 开销
宏观视角
超越基本转换
转换器详解
boost::cnv::lexical_cast 转换器
boost::cnv::stream 转换器
格式化支持
数值基数
字段宽度、填充字符和调整
前导空白字符
布尔值格式
区域设置支持
支持的字符串类型
宽字符串
自定义字符串类型
默认可构造 类型要求
boost::cnv::strtol 转换器
基本部署
格式化支持
数值基数(bin、oct、dec、hex)
字段宽度、填充字符和调整
前导空白字符
浮点精度
支持的字符串类型
宽字符串
自定义字符串类型
boost::cnv::charconv 转换器
基本部署
格式化支持
数值基数(bin、oct、dec、hex)
字段宽度、填充字符和调整
前导空白字符
浮点精度
浮点表示法
支持的字符串类型
自定义字符串类型
设计说明
要求
转换器签名
用户界面签名
支持工具
boost::cnv::range
boost::cnv::is_range
BOOST_DECLARE_HAS_MEMBER
BOOST_DECLARE_IS_CALLABLE
支持的编译器
致谢
Boost.Convert C++ 参考
头文件 <boost/convert.hpp>
头文件 <boost/convert/base.hpp>
头文件 <boost/convert/charconv.hpp>
头文件 <boost/convert/lexical_cast.hpp>
头文件 <boost/convert/parameters.hpp>
头文件 <boost/convert/printf.hpp>
头文件 <boost/convert/spirit.hpp>
头文件 <boost/convert/stream.hpp>
头文件 <boost/convert/strtol.hpp>
头文件 <boost/make_default.hpp>
索引
[Important] 重要

需要 C++11 及更高版本。

我广泛使用文本配置文件,并且还在 XML 中处理和准备大量数据。因此,我需要一个 可扩展 的库,该库将提供一个 统一 的接口,用于在各种数据的内部二进制表示和外部(主要是文本)表示之间进行转换。

boost::lexical_cast 库(凭借其正交和可扩展的设计)与其他库相比看起来非常有希望(有关替代方案的讨论,请参阅 H. Sutter 的 Manor Farm 的字符串格式化程序)。不幸的是,

  • 许多已部署的用户类型根本不满足 boost::lexical_cast 的要求(即 默认可构造性);
  • 转换用户提供的配置参数失败并非罕见或异常到足以证明异常处理的麻烦和开销;因此,需要额外的灵活性(如果何时如何)来处理转换失败;
  • 需要额外的转换相关功能(例如格式化和区域设置支持)。

最初的希望是看到 boost::lexical_cast 得到扩展,以适用于更广泛的部署场景。但是,在与 Kevlin Henney(boost::lexical_cast 的作者)以及 Boost 开发者论坛进行讨论后,大家一致认为,所需的扩展与 boost::lexical_cast 的原始设计和理念不兼容,因此,需要一个具有更丰富接口和功能的新组件。该决定促成了本文档中描述的 Boost.Convert 的开发。


Next