Boost.Lexical_Cast用法小结
来源:互联网 发布:子见夫子乎 编辑:程序博客网 时间:2024/04/29 04:29
Lexical_Cast是Boost库中的一个小库。主要用于简单的数值和文本(字面量)间的相互转换。重要的有三个——lexical_cast,try_lexical_convert,bad_lexical_cast。其中,bad_lexical_cast继承于std::bad_cast,用于在转化失败时抛出异常。如果需要的是数值之间的转换,那么应该使用numeric_cast
传统的C风格的转换函数的只有单向转换,且仅限原生的一个子集(int,double,long)
sprintf使用不方便且向安全性进行了妥协,
itoa等函数并不是标准函数,又缺少了轻便性。
strtol又提供了太过于强大的转换过程的控制,而大部分时间又不会需要。
C++标准库提供的stringstream来处理此类问题,既会使用额外变量,也让语义显得模糊,蹩脚。
lexical_cast的目的就是找到一种比较好的方式,避免前两种风格的转换函数的缺陷。
一个简单样例
#include <boost/lexical_cast.hpp>#include <vector>int main(int /*argc*/, char * argv[]){ using boost::lexical_cast; using boost::bad_lexical_cast; std::vector<short> args; while (*++argv) { try { args.push_back(lexical_cast<short>(*argv)); } catch(const bad_lexical_cast &) { args.push_back(0); } } // ...}
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);
实际上,lexical_cast的实现是:
template <typename Target, typename Source>inline Target lexical_cast(const Source &arg){ Target result; if (!conversion::try_lexical_convert(arg, result)) throw bad_lexical_cast(); return result;}
其实是使用try_lexical_convert进行转换,而try_lexical_convert又是使用stringstream进行转换。
lexical_cast的大多数简易的转换情况下效率极高,比c的sprintf和c++的stringsteam都高。
这就是lexical_cast的简单的用法小结。
以后有时间再分析源码。
0 0
- Boost.Lexical_Cast用法小结
- boost::lexical_cast小结
- 用boost::lexical_cast用法解析
- Boost::lexical_cast
- Boost :Lexical_cast
- boost::lexical_cast
- boost lexical_cast
- boost::lexical_cast
- boost lexical_cast
- boost::lexical_cast
- BOOST-lexical_cast
- boost::lexical_cast常见用法详解之万能转换
- boost翻译(1):lexical_cast
- 学习boost之lexical_cast
- 万能转换器boost::lexical_cast
- 万能转换器boost::lexical_cast
- boost lexical_cast使用
- boost lexical_cast使用
- CPU计算性能测试程序
- web开发的一些基本概念
- VC 记录程序崩溃时的调用堆栈
- Servlet
- horrible, crazy and hardworking of TFG
- Boost.Lexical_Cast用法小结
- C++对象模型之RTTI的实现原理
- Flume 1.6.0 源码编译问题总结
- linux手动安装apache服务器
- unix环境高级编程之 read与write 函数详解
- 深圳APAC Day of CodeRetreat笔记
- 【Android UI设计】Dialog对话框详解(一)
- GitHub超详细新手使用教程
- android屏幕适配