首页 > 代码库 > boost::any( 能存放任何类型的数据)原理
boost::any( 能存放任何类型的数据)原理
=====================
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 = http://www.mamicode.com/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 = http://www.mamicode.com/new CType
}
//析构函数省略
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 = http://www.mamicode.com/new CType
}
//析构函数省略
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); //运行出错
}
boost::any( 能存放任何类型的数据)原理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。