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

本人是c++的小菜,但是做项目要用c++实现序列化,有一个示例代码,但是我百度了很久还是觉得看不太懂,也不知道怎么用,恳请各位大侠帮忙把下面这个程序写个注释,让我知道哪句... 本人是c++的小菜,但是做项目要用c++实现序列化,有一个示例代码,但是我百度了很久还是觉得看不太懂,也不知道怎么用,恳请各位大侠帮忙把下面这个程序写个注释,让我知道哪句话是干嘛的,我应该怎么用这个示例代码写自己的序列化程序,小弟将不胜感激。
#include "stdafx.h"
#include <fstream>
#include <boost/serialization/vector.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#pragma comment(lib,"C://libboost_serialization-vc80-mt-gd-1_45.lib")
////////////////////////////////////////////////////////////////////////////////
class subtest//类声明
{
public:
subtest()//构造函数
: mvalue1(-1)//成员变量初始化
{
}

template< class archive >//这个是干嘛的?

void serialize( archive &ar , unsigned int filever )//声明成员函数,但是括号里面那个变量是干嘛的看不懂啊?
{
ar & BOOST_SERIALIZATION_NVP(mvalue1);//这是干嘛的?
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这个类的实例
ints.push_back( 100 );//把vector那个数组长度增长100?瞎说的,不懂
ints.push_back( 200 );
std::ofstream ofs("c://test.xml");//把生成的xml文件存到这个路径下面
boost::archive::xml_oarchive oa(ofs);
int nvalue = 106;
a->nvalue = 0.1111;//成员变量赋值
a->obj.mvalue1=123;
a->obj.nvalue1=0.222;
oa << BOOST_SERIALIZATION_NVP(nvalue); //这是在干嘛?说的具体点噢,我真的很菜
oa << BOOST_SERIALIZATION_NVP(ints);
oa << BOOST_SERIALIZATION_NVP(a);
delete a;
}
/**
* load from archive
*/
{
std::vector< int > ints;
std::ifstream ofs("c://test.xml");
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 = ints.begin() ; i != ints.end() ; i++ )
{
printf("the value of vector %d\n",*i);
}
}
return 0;
}
希望每句话都给加个注释喔,说的基础一点。。。灰常感谢大家喔
展开
 我来答
aman048
2010-12-26 · TA获得超过235个赞
知道小有建树答主
回答量:199
采纳率:0%
帮助的人:172万
展开全部
竟然问到我。我知道的都告诉你吧,序列化这东西我也没做过,不过对于你的问题我还是能答个大概,过后自己找下资料吧
#include "stdafx.h"
#include <fstream>
#include <boost/serialization/vector.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#pragma comment(lib,"C://libboost_serialization-vc80-mt-gd-1_45.lib")
////////////////////////////////////////////////////////////////////////////////
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这个类的实例
ints.push_back( 100 );//这部分内容你可以看C++primer.这是在容器尾添加值为100的元素
ints.push_back( 200 );
std::ofstream ofs("c://test.xml");//把生成的xml文件存到这个路径下面
boost::archive::xml_oarchive oa(ofs);
int nvalue = 106;
a->nvalue = 0.1111;//成员变量赋值
a->obj.mvalue1=123;
a->obj.nvalue1=0.222;
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://test.xml");
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 = ints.begin() ; i != ints.end() ; i++ )
{
printf("the value of vector %d\n",*i);
}
}
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式