http://www.boost.org/doc/libs/1_54_0/doc/html/boost/any.html
class any {
public:
// construct/copy/destruct
any();
any(const any &);
any(any &&);
template<typename ValueType> any(const ValueType &);
template<typename ValueType> any(ValueType &&);
any & operator=(const any &);
any & operator=(any &&);
template<typename ValueType> any & operator=(const ValueType &);
template<typename ValueType> any & operator=(ValueType &&);
~any();
// modifiers
any & swap(any &);
// queries
bool empty() const;
const std::type_info & type() const;
};
类 any 允许对任意类型进行类型安全的存储和取回
any提供的接口可参考官方文档或者.hpp文件
简单使用:
vector<boost::any> va;
va.push_back(100);
va.push_back(3.14);
va.push_back(string("yixiao"));
for(vector<boost::any>::iterator it = va.begin(); it != va.end(); ++it)
{
if(it->type() == typeid(int))
{
cout<<boost::any_cast<int>(*it)<<endl;
}
else if(it->type() == typeid(double))
{
cout<<boost::any_cast<double>(*it)<<endl;
}
else if(it->type() == typeid(string))
{
cout<<boost::any_cast<string>(*it)<<endl;
}
}
从any提供接口可以获知,可将任何类型赋值给any类型,比如:
boost::any ay = 10;
ay = string("Hi,yixiao");
要取any的值,可以使用 boost::any_cast:
cout<<boost::any_cast<string>(ay)<<endl;
如果any_cast失败,会抛出boost::bad_any_cast的异常,比如:
ay = string("Hi,yixiao");
try
{
cout<<boost::any_cast<int>(ay)<<endl;
}
catch(boost::bad_any_cast &e)
{
cout<<"catch:"<<e.what()<<endl;
}
执行程序,提示:
catch:boost::bad_any_cast: failed conversion using boost::any_cast