boost之lexical_cast

26 篇文章 3 订阅

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

文件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/】


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值