Boost :Lexical_cast

2024-02-14 22:38
文章标签 cast boost lexical

本文主要是介绍Boost :Lexical_cast,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

lexical_cast函数本身的代码非常短,如下:

 

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;

}

 

返回将arg流入std::stringstream然后再作为Target对象取出的结果。转换就这样被当前的lexical_context参数化了。如果转换不成功,一个 bad_lexical_cast异常被抛出,否则一个Target对象被返回。

 

参数和结果类型的要求如下:

 

    * Source 是可以流输出的,也就是说得提供一个左边是std::ostream对象,右边是一个 参数类型实例的 operator<< 操作符实现。

    * Source Target 都得是可拷贝构造的(提供拷贝构造函数) [20.1.3].

    * Target 是可以流输入的,也就是说得提供一个左边是 std::istream 对象右边是 结果类型实例的 operator>> 操作符实现。

    * Target 是可以 默认构造的, 就是说默认初始化一个该类型对象是可能的(提供默认构造函数)[8.5, 20.1.3].

    * Target 可赋值的 [23.1].

 

bad_lexical_cast

 

    class bad_lexical_cast : public std::bad_cast{public:    virtual const char * what() const throw();};

 

主要的实现部分在lexical_stream的两个重载方法:<< 和 >> 中,

 

..........

bool operator<<(const Source &input)

{

    return !(stream << input).fail();

}

 

template<typename InputStreamable>

bool operator>>(InputStreamable &output)

{

    return !is_pointer<InputStreamable>::value &&

                                stream >> output &&

                                (stream >> std::ws).eof();

}

 

bool operator>>(std::string &output)

{

    #if defined(BOOST_NO_STRINGSTREAM)

    stream << '\0';

    #endif

    output = stream.str();

    return true;

}

这篇关于Boost :Lexical_cast的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/709759

相关文章

Boost程序库入门学习

优秀的程序员要能够知其所以然,而不是重复的造轮子,近期目标是学习优秀的第三方库,同时尝试使用C++11/14新特性,然后吸取精华用到项目中去,加油~ 参考书籍: 罗剑锋写的《Boost程序库完全开发指南》和《Boost程序库探秘》,前者是一个大体的介绍,后者是针对一些诸如模板元编程等高级特性做了深入的探讨。 一、Boost库概述 Boost是一个功能强大、构造精巧、跨平台、开源并且完全

Boost库一些概念

Boost库一些概念 回调函数和异步操作的设计优势 在 Boost.Asio 中,异步操作和回调函数的设计有以下几个主要优势:1. 非阻塞 I/O非阻塞: 异步操作不会阻塞线程,允许程序在等待 I/O 操作完成的同时执行其他任务。这提高了程序的响应性和并发处理能力。事件驱动: 通过事件循环和回调函数,程序可以以事件驱动的方式处理 I/O 操作,避免了传统阻塞 I/O 模型中的线程阻塞问题。2.

org.hibernate.transaction.JDBCTransaction cannot be cast to javax.transaction.Transaction

org.hibernate.transaction.JDBCTransaction cannot be cast to javax.transaction.Transaction 这部分的具体地方为Transaction tr =(Transaction) session.beginTransaction();  错误原因:包倒错了,应该导入的包是hibernate的Transaction包

boost.graph之属性

相关宏 BOOST_INSTALL_PROPERTY #define BOOST_INSTALL_PROPERTY(KIND, NAME) \template <> struct property_kind<KIND##_##NAME##_t> { \typedef KIND##_property_tag type; \} 最终形式为 template <> struct proper

boost和buck-boost拓扑原理

如果是交流电可以用变压器升压: boost升压直接的问题就是电流随着电压的升高会降低,这个时候可以使用PD技术升高功率 boost拓扑: MOS关断的时候电感右侧的电压是VO + VD,电感左侧的电压是VIN,显然电感右侧电压大于电池电压VIN: BUCK---BOOST: 电磁兼容EMC包括电磁干扰EMI和电磁抗干扰EMS:有空对这些进行专门的学习:

cannot be cast toandroid.widget.HeaderViewListAdapter

在做上拉刷新的时候,想要在下拉到底部的时候通过addFooterView给listview添加一个view,遇到这个异常 网上找到解决方法之后,记录下。 ---------------------------------------------- cannot be cast toandroid.widget.HeaderViewListAdapter 用listview设置h

java.lang.ClassCastException: org.apache.commons.dbcp.BasicDataSource cannot be cast to

ApplicationContext cxt = new ClassPathXmlApplicationContext("beans.xml"); ProductService productService = (ProductService) cxt.getBean("dataSource"); productService.save(new ProductType()); 异常: java

null cannot be cast to non-null type android.databinding.ViewDataBinding

如果Build.gradle和Layout文件配置正确,仍无法生成ViewDataBinding类。 经测试,Gradle的sync无效,clean project无效,invalidate and restart无效,但是Build->Rebuild Project生效了。 还不行的话,使用ViewDataBinding抽象类的setVariable方法,也可以生效。 AS版本:3.1.3

Ubuntu安装boost,protobuf、moduo

一、Ubuntu安装muduo muduo库是基于boost开发的,确保先安装了boost(对boost版本有要求),还需要先安装protobuf,curl库 库版本boost1.70.0protobuf3.14.0curl7.74.0muduo2.0.2 1、Ubuntu安装boost # 更新资源列表sudo apt update# 安装依赖sudo apt install bu

C++ boost::upgrade_lock boost::upgrade_to_unique_lock如何使用 例子

upgrade_lock将可将读锁(shared_lock)升级为upgrade_lock,与shared_lock不互斥,与别的upgrade_lock和unique_lock互斥。 也就是说线程A获得mutex的upgrade_lock后,线程B、C等还可以获得mutex的share_mutex,反之亦然。 upgrade_to_unique_lock可将upgrade_lock升级为独占