any是一种特殊的容器,它只能容纳一个元素,但这个元素可以是任意类型;
    可以用any保存任何类型,在任何需要的时候取出它;
    这种功能和shared_ptr<void>类似,但是any是类型安全的;
    any不是一个模板类,但是其有模板构造函数,从而实现任意类型;
    空的any构造函数创建一个空的any对象,不持有任何值;
    成员函数empty()可判断any是否为空;
    成员函数swap(...)可交换两个any的值;
    如果any持有一个对象,函数type()返回对象的type_info类型信息;
    当容器的元素是any时,容器就像是一个可持有多个不同类型对象的动态tuple;
    如果希望一种数据结构具有tuple那样的容纳任意类型的能力,又可在运行时动态变化大小,可以用any作为元素类型搭配容器.
    更多用法请参考boost程序完全开发指南...

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
 
/* boost_any.cpp
    any是一种特殊的容器,它只能容纳一个元素,但这个元素可以是任意类型;
    可以用any保存任何类型,在任何需要的时候取出它;
    这种功能和shared_ptr<void>类似,但是any是类型安全的;
    any不是一个模板类,但是其有模板构造函数,从而实现任意类型;
    空的any构造函数创建一个空的any对象,不持有任何值;
    成员函数empty()可判断any是否为空;
    成员函数swap(...)可交换两个any的值;
    如果any持有一个对象,函数type()返回对象的type_info类型信息;
    当容器的元素是any时,容器就像是一个可持有多个不同类型对象的动态tuple;
    如果希望一种数据结构具有tuple那样的容纳任意类型的能力,又可在运行时动态变化大小,可以用any作为元素类型搭配容器.
    更多用法请参考boost程序完全开发指南...
*/

/*
class any {  
public:  
// construct/copy/destruct  
any();  
any(const any &);  
template<typename ValueType> any(const ValueType &);  
any & operator=(const any &);  
template<typename ValueType> any & operator=(const ValueType &);  
~any();

// modifiers  
any & swap(any &);

// queries  
bool empty() const;  
const std::type_info & type() const;  
};  
*/

#include <iostream>
#include <string>
#include <vector>
#include <cassert>

#include <boost/any.hpp>
#include <boost/typeof/typeof.hpp> 
#include <boost/assert.hpp>
#include <boost/assign.hpp>

using namespace std;
using namespace boost;
using namespace boost::assign;

//辅助函数
template<typename T>
bool can_cast(any& a)
{
    return typeid(T) == a.type();
}

template<typename T>
T& get(any& an)
{
    BOOST_ASSERT(can_cast<T>(an));
    return *any_cast<T>(&an);
}

template<typename T>
T* get_ptr(any& aaa)
{
    BOOST_ASSERT(can_cast<T>(aaa));
    return any_cast<T>(&aaa);
}

int main(void)
{
    any a1();
    int nInt = any_cast<int>(a1);
    assert(nInt == );

any_cast<;
    assert(any_cast<);

any a2 = ;
    a1.swap(a2);

any aaaaa("str");
    a1.swap(aaaaa);

try
    {
        any aa;
        if (aa.empty())
        {
            cout << "empty" << endl;
        }
        int n = any_cast<int>(aa);
    }
    catch(boost::exception&)
    {
        cout << "exception" << endl;
    }

get<;
    *get_ptr<;

//应用于容器
    vector<any> v1;
    v1.push_back();
    v1.push_back();
    v1.push_back("Michael Joessy");

vector<any> v2 = list_of<any>()("string");

cin.get();
    ;
}

boost数据结构any(很有用!)的更多相关文章

  1. boost数据结构tuple

    boost数据结构tuple tuple(元组)定义了一个有固定数目元素的容器,其中每个元素类型可以不相同,这与其它容器有着本质的区别!vector和array虽然可以容纳很多元素,但是元素的类型必须 ...

  2. elasticsearch 官方监控文档 老版但很有用

    https://zhaoyanblog.com/page/1?s=elasticsearch 监控每个节点(jvm部分) 操作系统和进程部分 操作系统和进程部分的含义是很清楚的,这里不会描述的很详细. ...

  3. 在网站开发中很有用的8个 jQuery 效果【附源码】

    jQuery 作为最优秀 JavaScript 库之一,改变了很多人编写 JavaScript 的方式.它简化了 HTML 文档遍历,事件处理,动画和 Ajax 交互,而且有成千上万的成熟 jQuer ...

  4. 分享20款移动开发中很有用的 jQuery 插件

    今天,很显然每个网站都需要有一个移动优化的界面以提高移动用户的使用体验.在开发任何移动项目时,要尽可能保持每一种资源尺寸都尽可能的小,以给最终用户提供一个好的体验是非常重要的.在这篇文章中我们已经编制 ...

  5. linux非常用但很有用的命令

    查找指定目录下包含指定字符串的所有文件 grep -rl 'abc' / top查看命令的完整启动路径 top 按c top以MB为单位显示内存信息 top -M 查看内存top io趋势 pidst ...

  6. 对于 Web 开发很有用的 jQuery 效果制作教程

    如果你的项目中需要响应式滑块,炫丽的图片呈现,对话框提示,轻巧动画等效果,jQuery 是完美的解决方案.凭借这个快速,易用的 JavaScript 库,可以轻松处理语言之间的交互,它给人最快速的 W ...

  7. 今日推荐:10款在 Web 开发中很有用的占位图片服务

    设计网站时,将要使用的图像在一开始通常还不存在,这个时候布局是最重要的.然而,图像的尺寸通常是预先设置,实用一些占位图像可以帮助我们更好地预览和分析布局. 如今,有免费的占位图片自动生成工具可以使用, ...

  8. 继承自NSObject的不常用又很有用的函数(2)

    函数调用 Objective-C是一门动态语言,一个函数是由一个selector(SEL),和一个implement(IML)组成的.Selector相当于门牌号,而Implement才是真正的住户( ...

  9. 20+ 个很有用的 jQuery 的 Google 地图插件

    转自:http://www.oschina.net/translate/20-useful-jquery-google-maps-plugins Google 地图在寻找我们想要了解的商店或者其它有趣 ...

随机推荐

  1. Load和CPU利用率是如何算出来的 (转发)

    本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/system/how_to_cal ...

  2. Linux管道符

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGFpanVucGVuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  3. xpath的基础实例

    本文分为路径表达式和常用函数两部分,整理自火车浏览器官方教程-火车浏览器之Xpath讲解. 小提示:可以使用火狐浏览器.我用的是火狐浏览器+firebug+firepath来进行调试,调试界面是这样的 ...

  4. Tcp Ip -- tcpdump win窗口大小

    问题介绍 今天,有内部模块与外部系统断连. (外部系统smgw,内部接口interface) smgw <----> interface 有消息交互. 通过tcpdump -xns0 po ...

  5. xgboost 自定义目标函数和评估函数

    https://zhpmatrix.github.io/2017/06/29/custom-xgboost/ https://www.cnblogs.com/silence-gtx/p/5812012 ...

  6. Spring Boot(四):利用devtools实现热部署,改动代码自动生效

    一.前言 spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去.原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后 ...

  7. Python学习笔记7:函数对象及函数对象作參数

    一.lambda函数 比如: fun1 = lambda x,y: x + y print fun1(3,4) 输出:7 lambda生成一个函数对象.该函数參数为x,y,返回值为x+y.函数对象赋给 ...

  8. Tomcat 学习进阶历程之Tomcat架构与核心类分析

    前面的http及socket两部分内容,主要是为了后面看Tomcat源代码而学习的一些网络基础.从这章開始.就開始实际深入到Tomcat的'内在'去看一看. 在分析Tomcat的源代码之前,准备先看一 ...

  9. python学习之socket模块

    socket.socket(family=AF_INET,type=SOCK_STREAM,proto=,fileno=None) 使用给定的地址族,套接字类型和协议号创建一个新的套接字.family ...

  10. H5area的热区锚点随着图片的尺寸而变化

    <area shape="rect" coords="338,308,609,589" > <img id="pic" s ...