boost::any( 能存放任何类型的数据)原理
来源:互联网 发布:阿里云服务器 ftp 编辑:程序博客网 时间:2024/05/16 00:38
=====================
template<class T>
class any
{
public:
T m_data;
};
void main()
{
any<int> a;
}
缺点是 必须知道类型,有时我们并不知道某个对象的类型。
-------------
class any
{
public:
template<class T>
any(const T& t)
{
m_pData = new T(t);
}
protected:
void* m_pData;
};
void main()
{
any a(3);
}
void*是不安全的。
--------------
#include <iostream>
using namespace std ;
class any
{
public:
template<class T>
any(const T& t)
{
m_pData = new CType<T>(t);
}
//析构函数省略
class CTypeRoot
{};
template<class T>
class CType : public CTypeRoot
{
public:
CType(const T& t):m_value(t)
{
}
T m_value;
};
public:
CTypeRoot* m_pData;
};
void main()
{
any a(3);
}
可以编译通过了,但无法取值。
===============
#include <iostream>
#include <string>
using namespace std ;
class any
{
public:
template<class T>
any(const T& t)
{
m_pData = new CType<T>(t);
}
//析构函数省略
class CTypeRoot
{};
template<class T>
class CType : public CTypeRoot
{
public:
CType(const T& t):m_value(t)
{
}
T m_value;
};
public:
CTypeRoot* m_pData;
};
template<typename ValueType>
ValueType any_cast(const any& operand,const ValueType tDefault = ValueType() )
{
any::CType<ValueType>* p = static_cast<any::CType<ValueType>* >(operand.m_pData);
return p->m_value;
}
void main()
{
any a(3);
int y = any_cast<int>(a);
// string y1 = any_cast<string>(a); //运行出错
}
0 0
- boost::any( 能存放任何类型的数据)原理
- boost::any类型实现原理
- 万能类型boost::any
- 模仿boost::any类型
- 万能类型boost::any
- 让Boost.python支持Boost::any类型。
- boost::any的介绍
- boost::any的介绍
- object[]可以存放哪些类型的数据?
- 白乔原创:万能类型boost::any
- 4.6.1 万能类型boost::any
- boost.any实现任意类型存储
- boost::any库的使用
- boost::any的一般用法
- Boost any库的笔记
- boost::any 与 boost::variant 的区别
- boost::any 与 boost::variant 的区别
- 【Unity&C#&数组】如何创建一个存放任何类型变量的数组
- JAVA 代码
- linux高级工具命令(三)使用gprof和oprofile查找性能瓶颈
- HTTP消息头字段
- php 文件上传 测试过程
- Aware相关的接口
- boost::any( 能存放任何类型的数据)原理
- 索引
- Android自定义控件——自定义属性
- 图结构(五)- 邻接表有向图
- linux 下安装nginx
- java中用jdom 如何创建xml文档/将数据写入XML中
- 【设计模式】-适配器模式(Adapter)
- Ubuntu 12.04下关闭图形界面的相关问题
- 表分区