C++ ,boost, serialization,序列化,生成xml文件

C++ ,boost, serialization,序列化,生成xml文件,第1张

竟然问到我。我知道的都告诉你吧,序列化这东西我也没做过,不过对于你的问题我还是能答个大概,过后自己找下资料吧

#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命令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10129266.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存