any 是一种很特殊的容器,它只能容纳一个元素,但这个元素可以是任意的类型——int、double、string、标准容器或者任何的自定义类型。程序可以用 any 保存任意的数据,在任何需要的时候将它取出。这种功能与shared_ptr<void> 有些类似,但 any 类型安全。

any 位于名称空间 boost,为了使用 any 组件,需要包含头文件<boost\any.hpp>

any 能够容纳任意类型的原因在于它的构造函数以及赋值构造都是模板函数

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

如果用 any 保存原始指针会造成内存泄露,替代方法是使用智能指针来存入 any 容器:

int* p = new int(10);// 应该用 shared_ptr<int> p(new int(10))
any a = p;// 危险,会造成内存泄露

空的 any 构造函数会创建一个空的 any 对象,不持有任何值。成员函数 empty() 可以判断 any 对象是否为空。如果 any 持有一个对象,那么成员函数 type() 返回对象的类型信息,是一个标准的 type_info 类的引用。

bool empty() const;
const std::type_info& type() const;

访问 any 中的元素

any 类本身不提供任何对内部元素的访问函数,而是使用了一个友元函数 any_cast<>();

template<typename T>
T any_cast(any& operand);template<typename T>
T any_cast(const any& operand);

如下的例子:

any a(10);
int n = any_cast<int>(a);
assert(n == 10);
any_cast<int&>(a) = 20;// 返回值也为 int&,可修改的左值
assert(any_cast<int>(a) == 20);

意义

any 的类接口很小且简单,它的出现让 C++ 的强类型检查失去了作用,C++ 仿佛变成了一种弱类型的动态语言。

any a(100);
a = string("char*")
a = vector<vector<int>>();

在 any 中存储字符串的时候,我们必须使用 std::string,如果直接使用 C 字符串会引发编译错误。

boost基础——any相关推荐

  1. boost基础——any(二)

    boost基础--any boost::any 和其他容器的搭配 boost::any 和其他容器的搭配形成一种异质型容器: (1)std::vector<boost::any> std: ...

  2. [Boost基础]并发编程——asio网络库——定时器deadline_timer

    asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求使用多线程和锁定,有些的避免了多线程编程带来的诸多有害副作用(如条件竞争 ...

  3. boost基础——随机数生成器

    (1)所需头文件 #include <boost\random.hpp> 生成指定区间的服从均匀分布的随机数(整数) #include <ctime> // for time( ...

  4. boost基础——variant的原理及基本用法

    The variant class template is a safe, generic, stack-based discriminated union container, offering a ...

  5. C++ 协程与网络编程

    协程 协程,即协作式程序,其思想是,一系列互相依赖的协程间依次使用CPU,每次只有一个协程工作,而其他协程处于休眠状态.协程可以在运行期间的某个点上暂停执行,并在恢复运行时从暂停的点上继续执行.  协 ...

  6. thrift中TNonblockingServer的简单用法

    最近在项目中需要把客户端的一些信息发送到服务器上,听起来是个很简单的需求,但是实际考虑下,觉得如果自己手工实现,工作量也不小,而且尽是些繁琐且无聊的事情,遂考虑用现成的库来实现.对比了protocol ...

  7. boost::describe模块实现计算基础修饰符的测试程序

    boost::describe模块实现计算基础修饰符的测试程序 实现功能 C++实现代码 实现功能 boost::describe模块实现计算基础修饰符的测试程序 C++实现代码 #include & ...

  8. Boost:circular_buffer作为边界缓冲区的基础容器

    Boost:circular_buffer作为边界缓冲区的基础容器 实现功能 C++实现代码 实现功能 circular_buffer作为边界缓冲区的基础容器 C++实现代码 #include < ...

  9. boost.asio基础篇 小白入门注解

    参考资料:https://blog.csdn.net/caoshangpa/article/details/79231740 一个基础的同步客户端 //使用asio的所有程序都需要至少有一个io_co ...

最新文章

  1. 让炼丹更玄学!苏大博士生用「天干地支」生成随机种子,项目已开源
  2. 华为鸿蒙系统2019年秋季上市,华为鸿蒙系统秋季上市?或许真的要提前了,最快可能下个月发布...
  3. Uipath 学习栏目基础教学:5Uipath流程控制语句-整合
  4. python之ORM操作
  5. int** 赋值_Python的赋值、浅拷贝、深拷贝之间的区别
  6. 单身汪的电梯之旅(洛谷P1897题题解,Java语言描述)
  7. 服务器托管常见问题纠纷与解决方法
  8. 向量距离计算 java_在机器学习中扮演着极为重要角色的向量
  9. 王者荣耀显示聊天服务器异常,王者荣耀功能存在异常暂时关闭怎么回事 解决办法...
  10. 代码整洁之道读书笔记----第三章---函数--第一节-专注且短小
  11. 所有浏览器的 CSS selectors 兼容性
  12. 最新高级流量卡官网源码附教程
  13. hitool java_海思HiTool-STB-5.0.27最新版工具
  14. 车牌号识别 OpenCV
  15. NVIDIA GeForce Experience 无法登录解决办法
  16. R语言学习笔记(2)——mutate()函数
  17. python 的 int() 函数
  18. unix 增强工具_适用于任何UNIX系统的10种出色工具
  19. 简单的股票行情演示(一) - 实时标的数据
  20. 后台启动elastisearch-head,避免后台启动es head在关闭shell后es head自动关闭,网上一大堆错误的,这个是正解,来自互联网

热门文章

  1. Kafka的消费语义
  2. linux登录vnc的命令行,用VNC远程登陆linux (ZT)
  3. mysql表损坏自动修复工具_对MySQL数据表(已损坏)的修复
  4. 数组-scala数组与java的list的互转
  5. linux多线程求和_(TCP IP网络编程)实验七 多线程编程
  6. python装饰器-简易版
  7. 第八届蓝桥杯第七题日期问题
  8. 剑指offer面试题29. 顺时针打印矩阵(边界问题)
  9. 提升孩子的智力从用对方法做起
  10. 20面向对象三特征 之继承 方法重写 super