
竟然问到我。我知道的都告诉你吧,序列化这东西我也没做过,不过对于你的问题我还是能答个大概,过后自己找下资料吧
#include "stdafxh"
#include <fstream>
#include <boost/serialization/vectorhpp>
#include <boost/archive/xml_oarchivehpp>
#include <boost/archive/xml_iarchivehpp>
#pragma comment(lib,"C://libboost_serialization-vc80-mt-gd-1_45lib")
////////////////////////////////////////////////////////////////////////////////
class subtest//类声明
{
public:
subtest()//构造函数
: mvalue1(-1)//成员变量初始化
{
}
template< class archive >//这是类模板,学过C++的都应该知道的吧,接下来就以archive当做一个类型用,看来面这个函数serialize()
void serialize( archive &ar , unsigned int filever )//参数一个是模板类,前面声明了,具体是什么类型看调用时的情况。
{
ar & BOOST_SERIALIZATION_NVP(mvalue1);//按位与 *** 作。BOOST_SERIALIZATION_NVP是一个宏,XML下生成对应名称。
ar & BOOST_SERIALIZATION_NVP(nvalue1);//
}
int mvalue1; //
double nvalue1;//两个类的公有成员。
};
////////////////////////////////////////////////////////////////////////////////
class test
{
public:
test()
: mvalue(-1)
{
}
template< class archive >
void serialize( archive &ar , unsigned int filever )
{
ar & BOOST_SERIALIZATION_NVP(mvalue);
ar & BOOST_SERIALIZATION_NVP(nvalue);
ar & BOOST_SERIALIZATION_NVP(obj);
}
int mvalue;
double nvalue;
subtest obj;
};
////////////////////////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR argv[])
{
/
save archive
/
{
std::vector< int > ints;
test a = new test;//创建一个test这个类的实例
intspush_back( 100 );//这部分内容你可以看C++primer这是在容器尾添加值为100的元素
intspush_back( 200 );
std::ofstream ofs("c://testxml");//把生成的xml文件存到这个路径下面
boost::archive::xml_oarchive oa(ofs);
int nvalue = 106;
a->nvalue = 01111;//成员变量赋值
a->objmvalue1=123;
a->objnvalue1=0222;
oa << BOOST_SERIALIZATION_NVP(nvalue); //输出。整个程序以模板的形式载入XML文档,然后按位与保存。 再多的我也不回答你了,因为我也没做过这些
oa << BOOST_SERIALIZATION_NVP(ints);
oa << BOOST_SERIALIZATION_NVP(a);
delete a;
}
/
load from archive
/
{
std::vector< int > ints;
std::ifstream ofs("c://testxml");
boost::archive::xml_iarchive oa(ofs);
int nvalue = 0;
test a = NULL;
oa >> BOOST_SERIALIZATION_NVP(nvalue);
oa >> BOOST_SERIALIZATION_NVP(ints);
oa >> BOOST_SERIALIZATION_NVP(a);
for( std::vector< int >::iterator i = intsbegin() ; i != intsend() ; i++ )
{
printf("the value of vector %d\n",i);
}
}
return 0;
}
当编译完boost库后,静态库是放在库的stage/lib目录下。
要使用的话,就在bashrc里面加上BOOST_ROOT=xxx/boost_1_51_0,Boost_LIBRARYDIR=${BOOST_ROOT}/stage/lib。
编译程序的时候要指定boost的头文件和库的路径,如;
g++ democpp -I$BOOST_ROOT -L$Boost_LIBRARYDIR -lboostxxx -o demo
Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。
在VB中Shell函数用以执行一个可执行文件,返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。
以上就是关于C++ ,boost, serialization,序列化,生成xml文件全部的内容,包括:C++ ,boost, serialization,序列化,生成xml文件、boost的静态库怎么使用、boost执行一个shell命令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)