boost::any 与 boost::variant 的区别
来源:互联网 发布:net程序员工资 编辑:程序博客网 时间:2024/05/21 10:24
在使用boost::any 和 boost::variant的过程中遇到几个小问题,按个人理解对二者做了一下比较。令人最遗憾的是boost::any与boost::serialization 不兼容。 More...
boost::any
* 非模板类
这意味着即时是跨dll也可以方便地使用,支持无限种变量。
* boost::serialization
不支持。有人对此进行了激烈的讨论,在这里。
boost::variant
* 模板类
由于模板参数的限制(支持的变量类型需要列在模板参数列表里),因而只支持有限种变量。
如果需要跨DLL使用,声明处需要引用所有需要的变量
* 基于stack
这意味着对于动态创建的对象,内存需要自己管理。
* 支持boost::serialization
Boost::any
Boost::variant
是否模板类
否
是
基于stack
是也不是
是
是否支持boost:: serialization
否
是
#ifdef _USE_ANY
typedef boost::any AcVariant;
#else
typedef boost::variant<int, AcString, AcObjectId, float, double,
AcPoint3F, AcColor, AcTrf3F> AcVariant;
#endif
//////////////////////////////////////////////////////////////////////////
template<typename T>
inline bool fromVariant(const AcVariant& var, T& value)
{
#ifdef _USE_ANY
try
{
value = boost::any_cast<T>(var);
return true;
}
catch(const boost::bad_any_cast &)
{
return false;
}
#else
value = boost::get<T>(var);
#endif
return true;
}
template<typename T>
inline T fromVariant(const AcVariant& var)
{
#ifdef _USE_ANY
return boost::any_cast<T>(var);
#else
return boost::get<T>(var);
#endif
}
typedef boost::any AcVariant;
#else
typedef boost::variant<int, AcString, AcObjectId, float, double,
AcPoint3F, AcColor, AcTrf3F> AcVariant;
#endif
//////////////////////////////////////////////////////////////////////////
template<typename T>
inline bool fromVariant(const AcVariant& var, T& value)
{
#ifdef _USE_ANY
try
{
value = boost::any_cast<T>(var);
return true;
}
catch(const boost::bad_any_cast &)
{
return false;
}
#else
value = boost::get<T>(var);
#endif
return true;
}
template<typename T>
inline T fromVariant(const AcVariant& var)
{
#ifdef _USE_ANY
return boost::any_cast<T>(var);
#else
return boost::get<T>(var);
#endif
}
- boost::any 与 boost::variant 的区别
- boost::any 与 boost::variant 的区别
- Boost库之tuple、any和variant的使用
- Boost::Variant
- boost::variant
- boost::any的介绍
- boost::any的介绍
- boost::variant的简单介绍
- boost::any
- Boost::any
- BOOST--any
- boost::any
- boost::any
- Boost::Any
- boost::any
- boost any
- boost any
- Boost.Any
- 业务人员、销售人员、跟单人员必须懂得回答问题技巧
- H.264学习历程(天之骄子)
- MyEclipse+Flex.Builder+Tomcat+BlazeDS
- 开源ERP软件OpenERP在中国
- Linux内核的Makefile和kconfig解读
- boost::any 与 boost::variant 的区别
- mbr的ubuntu引导位置更改及mbr损坏后的修复
- Tips of Emacs
- 如何读H.264的标准和代码
- 关机重启注销慢? 头疼? 提高速度的好办法!
- WCF、Net remoting、Web service概念及区别
- WCF基础概念
- UML总结2--总体架构
- 再出发!