一.DataContainer.h头文件的声明,如下:
#ifndef DATA_CONTAINER_H
#define DATA_CONTAINER_H
#include <vector>
#include <boost/any.hpp>
class DataContainer{
public:
void push(boost::any _any);
boost::any get(int index);
size_t size();
private:
std::vector<boost::any> _vector;
};
inline void DataContainer::push(boost::any _any){
_vector.push_back(_any);
}
inline boost::any DataContainer::get(int index){
if(index < size()){
return _vector[index];
}else{
return 0;
}
}
inline size_t DataContainer::size(){
return _vector.size();
}
#endif
二.DataAuxiliary.h头文件的声明,如下:
#ifndef DATA_AUXILIARY_H
#define DATA_AUXILIARY_H
#include <iostream>
#include "DataContainer.h"
class DataAuxiliary{
public:
static bool getBool(DataContainer& container,int index);//这里只声明并实现了3种数据类型,当然有需要的话,
static int getInt(DataContainer& container,int index);//可以自己扩展其他数据类型,或者自定义类型,比如自己声明的类
static std::string getString(DataContainer& container,int index);
private:
DataAuxiliary(){}
};
#endif
三.DataAuxiliary.cpp的实现,如下:
#include "DataAuxiliary.h"
bool DataAuxiliary::getBool(DataContainer& container,int index){
try{
return boost::any_cast<bool>(container.get(index));//基于boost::any_cast读取存储在any中的数据
}catch(boost::bad_any_cast& e){
throw e;
}
return false;
}
int DataAuxiliary::getInt(DataContainer& container,int index){
try{
return boost::any_cast<int>(container.get(index));
}catch(boost::bad_any_cast& e){
throw e;
}
return 0;
}
std::string DataAuxiliary::getString(DataContainer& container,int index){
try{
return boost::any_cast<std::string>(container.get(index));
}catch(boost::bad_any_cast& e){
throw e;
}
std::string empty = std::string("");
return empty;
}
四.main.cpp函数的实现,如下:
#include "DataContainer.h"
#include "DataAuxiliary.h"
#include <iostream>
int main(int argc,char** argv){
DataContainer container;
container.push(boost::any(55));
container.push(boost::any(true));
container.push(boost::any(std::string("something")));
int num = DataAuxiliary::getInt(container,0);
bool flag = DataAuxiliary::getBool(container,1);
std::string str = DataAuxiliary::getString(container,2);
std::cout<<num<<std::endl;
std::cout<<str<<std::endl;
if(flag){
std::cout<<"true"<<std::endl;
}else{
std::cout<<"false"<<std::endl;
}
return 0;
}
转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/8204842