zoukankan      html  css  js  c++  java
  • boost之lexical_cast

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

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

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. namespace boost  
    2. {  
    3.     class bad_lexical_cast;  
    4.   
    5.     template<typename Target, typename Source>  
    6.       Target lexical_cast(const Source& arg);  
    7.   
    8.     template <typename Target>  
    9.       Target lexical_cast(const AnyCharacterType* chars, std::size_t count);  
    10. }  


    第一种形式:

    输出流参数的结果到一个基于字符串的标准库流中,并返回为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的样例

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


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

  • 相关阅读:
    JAVA CookieUtil
    Maven打包时提示No runnable methods的解决方案
    Spring MVC中Junit测试简单讲解
    C# 连接MongoDB,含用户验证
    Spring中同一个service中方法相互调用事务不生效问题解决方案
    004. vue html模板字符串转为ast(js对象)
    03事件模型-发布订阅模式
    000 学习vue源码里面一些处理技巧
    02 响应式原理
    my-ts-axios
  • 原文地址:https://www.cnblogs.com/diegodu/p/6183877.html
Copyright © 2011-2022 走看看