Boost组件 Any
1. 多态只有在使用指针或引用的情况下才能显现,所以std容器中只能存放指针或引用,但实际上只能存放指针,无法存放引用:
std::list<BaseClass*> mylist;
(1)这样,我们就要对指针所指向内容的生存周期操心(可能需要程序员适时删除申请的内存;但是由于存放指针,插入/删除的效率高);
(2)使用boost::any就可能避免这种情况,因为我们可以存放类型本身,当然存放指针也可以,这是boost::any的优点之一;
(3)boost::any另一个优点是可以存放任何类型;
2. boost::any的缺点:
由于boost::any可以存放任何类型,自然它用不了多态特性,没有统一的接口,所以在获取容器中的元素时需要实现判别元素的真正类型,这增加了程序员的负担;
3. 实现any的功能主要由三部分组成:
(1)any类;
(2)真正保存数据的holder类及其基类placeholder;
(3)获取真正数据的模板函数any_cast,类型转换的功能:
char* p = "我是常量区字符串abc";
la.push_back(p);//可以存放指针,但要注意指针的失效问题
std::cout<<any_cast<char*>(*it)<<std::endl;