偷窥Boost Conversion Library(二)

//(接上)

三、与值和类型相关的类型转换

1、 lexical_cast

在程序开发中,往往需要将数字型对象的值转换为字符文本格式,或反之操作。我们在C/C++标准程序库中可以找到这样的函数来进行转换,例如atoi。但是他们都有个通病,使用复杂,缺少扩展性,更重要的是不够安全。

使用lexical_cast就可以把这样的操作简单化。

 

try{

     int i= 100;

     string str= lexical_cast<string>(i);

     cout<<"The string is:"<<str<<endl;

        

     str="error";

     i=lexical_cast<int>(str);

}

catch(bad_lexical_cast& exobj){

     cout<<"No, you can't convert a /"error/" to a int"<<endl;

     cout<< exobj.what() << endl;

}

 

当把"error"转换为int时,这个错误就会被lexical_cast发现,然后抛处boost::bad_lexical_cast这个异常对象。

对于lexical_cast的使用也是有要求的:

1、 源类型必须能被输出流std::ostreamstd::wostream对象用operator<<()操作

2、 目标类型必须能被输入流std::istreamstd::wostream对象用operator>>()操作

3、 源类型和目标类型必须都是可拷贝构造的

4、 目标类型必须拥有default constructor

2、 窥其内部

template<typename Target, typename Source>

Target lexical_cast(Source arg){

        detail::lexical_stream<Target, Source> interpreter;

        Target result;

        if(!(interpreter << arg && interpreter >> result))

            throw_exception(bad_lexical_cast(typeid(Target), typeid(Source)));

        return result;

}

其中lexical_stream<>对字符串流做了一系列的包装,主要提供了operator<<(Source)operator>>(Target)操作,这两个操作的返回类型是bool,用于判断操作是否成功。

Target result;用于返回,这说明了目标类型必须拥有default constructor的原因。

interpreter<< arginterpreter>>result就是将arg的值放入到字符串流,把字符串流里的值放入result

如果操作失败,就抛出bad_lexical_cast对象。其中bad_lexical_cast对象里保存了源类型和目标类型的type_info对象的地址,这样就方便了对错误类型的查询。

 

return 0; //end

参考来源:Boost Conversion Library Documents

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
# RainClassroomAssitant   基于Python的雨课堂线上课划水小助手。 ## 介绍   疫情期间,网课成为了当前重要的教学方式。这种方式在疫情期间为诸位都提供了极大的便利。但是,不免有些线上水课,这些水课老师不仅仅讲的内容枯燥无聊,照着PPT读,还要整出一系列的活来提升听课率,例如:课堂中途偷袭式发题、点名,将弹幕回答问题记录作为考察平时成绩的依据等。为了解决线上水课不能安心划水的问题,雨课堂小助手应运而生。 ## 已实现功能 - 自动签到 - 自动答题(仅限于上课过程中发布的选择题、多选题、填空题) - 自动发弹幕(一定时间内收到一定数量的弹幕后,自动跟风发送相同内容的弹幕) - 点名、收到题目等情况下的语音提醒 - 多线程支持(此脚本支持在有多个正在上课课程的情况下使用) - 简洁美观的UI ## 待做功能 - [ ] 自动预习 ## 使用方法 ### 使用前准备 1. **使用前最好关闭所有代理程序,否则程序可能无法正常使用** ### 使用程序 v0.0.3版本,更新UI,此后版本双击打开即可使用! -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jinhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值