boost 系列二 Any
来源:互联网 发布:网络记者证 知乎 编辑:程序博客网 时间:2024/06/11 15:49
boost::any可以存放任何类型的C++类型,也可以是用户自定义的类型。非常方便,可以很方便的满足在运行过程中判断数据类型,从而进行相关的操作。
{
typedef std::list<boost::any> list_any;list_any la;
//存放常数
la.push_back(10);
//存放字符串对象;
//注意la.push_back(“dyunze”)错误,因为会被当错字符串数组
la.push_back( std::string("dyunze") );
list_any::iterator it;
boost::any anyone;
for( it = la.begin(); it != la.end(); it++ )
{
anyone = *it;
if( anyone.type() == typeid(int) )
std::cout<<boost::any_cast<int>(*it)<<std::endl;
else if( anyone.type() == typeid(std::string) )
std::cout<<boost::any_cast<std::string>(*it).c_str()<<std::endl;
}
}
同样的实现也可以使用 std::list<BaseClass*> mylist; 实现父类的虚接口即可。
boost::any的优点:
对设计模式理解的朋友都会知道合成模式。因为多态只有在使用指针或引用的情况下才能显现,所以std容器中只能存放指针或引用(但实际上只能存放指针,无法存放引用,这个好像是c++的不足吧)。如:
这样,我们就要对指针所指向内容的生存周期操心(可能需要程序员适时删除申请的内存;但是由于存放指针,插入/删除的效率高),而使用boost::any就可能避免这种情况,因为我们可以存放类型本身(当然存放指针也可以)。这是boost::any的优点之一。
boost::any另一个优点是可以存放任何类型。而前面提到的mylist只能存放BaseClass类指针以及其继承类的指针。
boost::any的缺点:
由于boost::any可以存放任何类型,自然它用不了多态特性,没有统一的接口,所以在获取容器中的元素时需要实现判别元素的真正类型,这增加了程序员的负担。与面向对象编程思想有些矛盾,但整个标准c++模板库何尝不是如此,用那些牛人的话来说,是“有益补充”。
总之,有利必有弊,没有十全十美的。
0 0
- boost 系列二 Any
- 引领Boost(二)(Boost::Any)
- 引领Boost(二)(Boost::Any)
- boost基础——any(二)
- boost::any
- Boost::any
- BOOST--any
- boost::any
- boost::any
- Boost::Any
- boost::any
- boost any
- boost any
- Boost.Any
- boost:any
- Boost使用指南之Boost.Any
- Boost中的容器boost::any
- Boost::any分析
- 用python登录Dr.com
- 初识Servlet
- 进程控制之孤儿进程
- Angular TimeOut Tricky
- A星寻路算法介绍(非常好)
- boost 系列二 Any
- 数据库索引的作用和优点缺点
- MyBatis的动态SQL详解
- bat 脚本编程总结备忘
- J2EE请求与响应—Servlet
- 模板模式c++代码实现
- Ext JS - 高效的编码风格指南
- 使用PF_PACKET和 SOCK_RAW探测网络包
- java excle 支持日期,公式