LinuxC/C++编程基础(2) 基于boost::any构建数据容器
来源:互联网 发布:网络加密怎么破解密码 编辑:程序博客网 时间:2024/06/06 00:42
一.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
- LinuxC/C++编程基础(2) 基于boost::any构建数据容器
- boost.any 容器
- Boost中的容器boost::any
- linuxc编程一站式学习(c基础)
- LinuxC/C++编程基础(7) boost::mutex的简单实例
- LinuxC/C++编程基础(15) boost同步socket处理
- LinuxC/C++编程基础(16) boost异步socket处理
- boost::any任意类别容器
- linuxC编程基础
- LinuxC基础编程
- LinuxC/C++编程基础(4) 基于泛型实现vector
- LinuxC/C++编程基础(20) 使用boost::asio搭建服务器简单实例
- LinuxC/C++编程基础(21) 使用boost::asio搭建服务器简单实例(续)
- boost基础——any
- C++编程 - tuple、any容器
- LinuxC/C++编程基础(3) 基于管道的进程间通信机制
- LinuxC/C++编程基础(8) 基于条件变量实现生产者与消费者的实例
- LinuxC/C++编程基础(11) 基于深度优先搜索查找迷宫路线
- in与exist,not in 与not exist 的区别
- OpenGL视口变换函数:glViewport
- Android九宫格游戏
- linux /etc/rc.d/介绍
- 最适合工作的50家公司
- LinuxC/C++编程基础(2) 基于boost::any构建数据容器
- float浮点数的二进制存储方式及转换
- Metro Style App :动画概要
- Android 自定义系统菜单的背景源码
- DAG单源最短路径
- 例题6.4.3
- request.getAttribute和getParameter区别
- VC++2012编程演练数据结构《29》图
- 技巧_MFC_模态对话框