如果有这样的结构:
struct rectangle{
double length;
double width;
};
struct a;
a.length = 1;
a.width = 2;
我想将其序列化为这样的xml文件:
<serialization>
<rectangle>
<length val=1/>
<width val=2/>
</rectangle>
</serialization>
而且我想为更多自定义变量做类似的事情。
但是我不知道如何认识成员,因为使用模板的函数不知道模板的具体结构。
有人可以给我一些帮助吗?
使用C ++ boost库查看此序列化文档:https://vorbrodt.blog/2019/03/10/serialize-data-to-xml/
这里是链接博客的代码段:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/serialization/vector.hpp>
using namespace std;
using namespace boost::archive;
using namespace boost::serialization;
struct person
{
string name;
int dob;
string email;
};
using people = vector<person>;
BOOST_CLASS_VERSION(person, 1);
BOOST_CLASS_VERSION(people, 1);
template<typename Archive>
void serialize(Archive& ar, person& person, const unsigned int version)
{
ar & BOOST_SERIALIZATION_NVP(person.name);
ar & BOOST_SERIALIZATION_NVP(person.dob);
ar & BOOST_SERIALIZATION_NVP(person.email);
}
int main(int argc, char** argv)
{
person me{"Martin Vorbrodt", 19800830, "[email protected]"};
person her{"Dorota Vorbrodt", 19810127, "[email protected]"};
people us{me, her};
{
ofstream ofs("data.xml");
xml_oarchive oa(ofs, boost::archive::no_header);
oa << make_nvp("people", us);
}
people us_too{};
{
ifstream ifs("data.xml");
xml_iarchive ia(ifs, boost::archive::no_header);
ia >> make_nvp("people", us_too);
}
for(auto& p : us_too)
{
cout << "Name : " << p.name << endl;
cout << "DOB : " << p.dob << endl;
cout << "EMail : " << p.email << endl << endl;
}
return 1;
}
该代码创建一个包含2个人项的XML结构。