Boost中的容器boost::any

本文介绍了Boost库中的boost::any容器,它能保存任意类型的变量,模拟动态类型,提供异常安全的类型转换。文章详细阐述了any的构造函数、成员函数、any_cast的两种用法以及注意事项,并给出了使用实例,展示了如何在C++中使用any存储和取出不同类型的对象。
摘要由CSDN通过智能技术生成

导言

  1. Boost.any的特性
    – 能够保存任意类型的变量,这和STL有很大的不同;
    – 模拟动态类型;
    类型安全:不对存入any的变量进行类型强制转换;
    – 异常安全;
    – 可写出动态语言的编程范式。
  2. 构造函数
    default构造函数, copy构造函数, move构造函数和operator=构造函数.
  3. 成员函数
    clear, empty, swap, type.
  4. any_cast用于取any中的值
    ① boost::any_cast<Type>(anyObj);返回的不是引用而是一个副本对象;如果类型不匹配会抛出boos::bad_any_cast异常
    ② boost::any_cast<Type>(&anyObj);如果类型不匹配则返回nullptr,不会抛出异常。因此,在代码过程中,我们习惯使用传引用而非传值
  5. bad_any_cast:一个异常类型;使用any_cast类型不匹配时会被抛出异常。如果不想抛出异常而使得程序崩溃,可用try catch捕获;不过不建议这么做!
  6. 注意事项
    – 需要RIIT支持
    – 所有的对象都是copy操作
    – 不对存入数据做类型转换
    – 动态分配内存
    – any不是模板类

使用实例

以下是any的公有接口:

namespace boost { 
    class any { 
        public:    
            any();    
            any(const any&); 

            template<typename ValueType>     
            any(const ValueType&);    

            ~any();    
            any& swap(any &);    
            any& operator=(const any&); 

            template<typename
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值