boost:any_春泥面包的博客-程序员宝宝

技术标签: boost  

引文:http://club.topsage.com/thread-2276552-1-1.html

引文讲解的非常详细,这里做一下学习记录。

Any库支持类型安全地存储和获取任意类型的值。当你需要一个可变的类型时,有三种可能的解决方案:

无限制的类型,如 void*. 这种方法不可能是类型安全的,应该象逃避灾难一样避免它。
可变的类型,即支持多种类型的存储和获取的类型。
支持转换的类型,如字符串类型与整数类型之间的转换。

Any实现了第二种方案,一个基于值的可变化的类型,无限可能的类型。这个库通常用于把不同类型的东西存储到标准库的容器中。

Any 库如何改进你的程序?

任意类型的类型安全存储以及安全的取回
在标准库容器中存放不同类型的方法
可以在无须知道类型的情况下传送类型

Any库提供一个类型, any, 它允许存入任意类型且稍后取回,而不损失类型安全性。它有点象是可变类型的化合物:它可以持有任意类型,但你必须知道类型才能取回值。有很多次你想在同一个容器中存入互不相关的类型。有很多次某些代码只想从一个指针向另一个指针传送数据,而不关心数据的类型。从表面看,这些事情很容易做。它们可以通过一个无类的类型来实现,如 void*. 它们也可以通过使用一个含有不同类型的union来实现。有很多可变类型通过一些类型标识机制来实现。不幸的是,所有这些都缺乏类型安全性,而只有在最可控的情形下我们才应该故意绕过类型系统。标准库的容器是要通过它们所包含的类型来特化的,这意味着不可能把不同类型的元素存入容器之内。幸运的是,解决的方案不一定要 void*, 因为 Any 库允许你将存入不同的类型而稍后取回。没有办法在不知道实际类型的情况下取回存入的值,类型安全从而得到保证。

在设计框架时,不可能预先知道哪些类型要和框架类一起使用。一个常见的方法是,要求框架的使用者遵守某种接口,或者从框架所提供的某个基类进行派生。这是合理的,因为框架可能需要与不同的高级类进行通信才能使用。但是也存在这样的情形,框架对于存入或接受的类型无须(或不能)知道任何相关信息。不要绕过类型系统去使用 void* 方法,框架可以使用 any 。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chj90220/article/details/53483056

智能推荐

placeholder属性_酷小亚的博客-程序员宝宝_placeholder属性

使用placeholder属性来提示输入框中需要输入的内容效果图:代码如下:<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>placeholder属性</title></head><body> <form action="#" method="get"> 请输入邮政编码: <input type="

黑马程序员——Objective-C程序设计(第4版)学习笔记之14-Foundation框架简介——黑马 IOS 技术博客_dumengqiu的博客-程序员宝宝

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------这章呢,属于第二部分了。没太多内容。为所有的程序开发奠定基础的框架称为Foundation框架。在Mac OS X系统中,术语Cocoa总的来说指的是Foundation框架、Application Kit框架和名为Core Data的第三方

无人驾驶前沿~CCF-GAIR 2019--港科大自主驾驶中心主任刘明~《低速无人驾驶系统的应用关键要素》学习记录_人工智能博士的博客-程序员宝宝

刘明教授,博士毕业于瑞士苏黎世联邦理工学院(ETH),现任香港科技大学智能驾驶中心主任、机器人与多感知实验室主任,兼任多家知名科技公司首席科学家,香港科技大学电子与计算机工程学系助理教授;在机器人领域累计发表论文100余篇,近五年获得了12次国际会议最佳论文或提名奖,以及包括中国人工智能最高奖—— “吴文俊人工智能科学技术奖”在内的多项奖励。2018年10月, 刘明教授获得IROS Toshio Fukuda Young Professional Award,成为首位获得此奖项的华人。_1671465600

关于linux的僵尸进程的产生原因的分析_skip_yj的博客-程序员宝宝

最近在学习linux的内核,在看完网上的一些wait4调用和do_exit调用说明后对僵尸进程的产生的缘由也有了一个大致的了解,在此对其作个总结:首先是do_exit()调用:do_exit(long code)(1) __exit_mm(tsk): //释放存储空间(2) sem_exit();          //释放用户空间的“信号量”(3) __exit_fi

Oracle GoldenGate 详细概述_It_PenGuin的博客-程序员宝宝_oracle goldengate

什么是 Oracle GoldenGateOracle GoldenGate是用于实时数据集成和复制的综合软件包。它支持高可用性解决方案、实时数据集成、事务更改数据捕获、数据复制、转换以及操作和分析企业系统之间的验证。使用Oracle GoldenGate,您可以在企业的多个系统之间移动已提交的事务。Oracle GoldenGate使您能够将 Oracle 数据库之间的数据复制到其他受支持的异构数据库,以及异构数据库之间。为什么使用Oracle GoldenGate企业数据通常分布在整个企业的异构

【转】如何订机票最划算?_wangyanlong0107的博客-程序员宝宝

作者:何亮链接:https://www.zhihu.com/question/19730044/answer/123367521来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。订机票是门学问,订得好与不好,可能同一班航班会差出几千块,而且别人还是头等舱。更别说,还有一些跟白捡似的机票了。长文,先看看目录,你会发现这门学问真的很深:...

随便推点

项目实战2:TF2.0+AlexNet构建Fasion MNSIT分类器_xping_zhou的博客-程序员宝宝

Table of Contents1.1 AlexNet 简介1.2 tensorflow2.0利用keras搭建AlexNet网络结构1.3 AlexNet实现Fasion MNIST分类参考文献及链接:一、前言在构建了LetNet网络实现对Fasion MNSIT的分类后,熟悉了深度学习在图像分类应用的大致流程,但精度不佳,于是决定搭建深度学习发展历程中经典的网络模型,...

程序猿养成--谈谈必须的好习惯_wx3957156的博客-程序员宝宝

你是否编写过复杂的SQL查询语句,但却不知道最基本的Update和Insert语句的语法,当使用时还要去重新查询MSDN文档来获取语法帮助;你是否编写过复杂的程序逻辑,却没注意缩进和注释,只注重高级的东西却忽视了最基本的,这是好高骛远的表现。生活中人说字如其人,可以通过一个人的写字方式和字的形状来读懂一个人,映射到计算机中同样有代码如其人,可以通过一个人编码的方式和编写的代码来读懂一个人。  

Wifi密码破解之二:利用wps漏洞穷举PIN码破解wifi密码_Shiftyman的博客-程序员宝宝_可使用wps的wifi怎样破

转自:http://xiao106347.blog.163.com/blog/static/21599207820136161132836/ 得到PIN码,怎么破解路由的密码呢?Linux系统下我们可以使用 Reaver 软件破解出路由的密码;下图是通过路由器的PIN码得到wifi密码的效果图:已知PIN码是   49312119破解出密码是   #$%19

iOS UITableView的使用大全_WilsonTang的博客-程序员宝宝

首先、对UITableView进行讲解,下面有对它进行实际的应用UITableView      显示大型内容的列表            单行,多列             垂直滚动,没有水平滚动             大量的数据集    性能强大,而且普遍存在于iPhone的应用程序中TableView St

【JZOJ5068】【GDSOI2017第二轮模拟】树 动态规划+prufer序列_weixin_30248399的博客-程序员宝宝

题面有n个点,它们从1到n进行标号,第i个点的限制为度数不能超过A[i].现在对于每个s (1 <= s <= n),问从这n个点中选出一些点组成大小为s的有标号无根树的方案数。100%的数据:n <= 100100prufer序列每个大小为n,有标号无根树都可以表示成一个长度为(n-2)且取值在[1,n]的序列。这个序列就叫prufer序列。树转prufer序列...

Android studio 3.5安装详解_qq_41888872的博客-程序员宝宝

<div class="htmledit_views __reader_view_article_wrap_9530208064096903__" id="content_views"> <p style="margin-left:0cm;"><strong>Android...

推荐文章

热门文章

相关标签