Boost组件 Any

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;