如何在C++中使用Boost反序列化XML
序列化有很多答案 < C++中的序列化/重构,这里是我的代码:如何在C++中使用Boost反序列化XML,c++,xml,serialization,boost,C++,Xml,Serialization,Boost,序列化有很多答案 < C++中的序列化/重构,这里是我的代码: #include <string> #include "Student.h" #include <iostream> #include <fstream> #include <ostream> #include <sstream> #include <boost\archive\xml_oarchive.hpp> #include <boost\archi
#include <string>
#include "Student.h"
#include <iostream>
#include <fstream>
#include <ostream>
#include <sstream>
#include <boost\archive\xml_oarchive.hpp>
#include <boost\archive\xml_iarchive.hpp>
#include <boost\archive\binary_oarchive.hpp>
#include <boost\archive\binary_iarchive.hpp>
using namespace std;
void serialization();
void reconstruction();
int main()
{
serialization();
reconstruction();
getchar();
return 0;
}
void serialization(){
int id = 100;
string name = "Mike";
Student student(id ,name);
string filename("student.xml");
std::ofstream ostreamXml(filename.c_str());
boost::archive::xml_oarchive oabin(ostreamXml);
oabin<<BOOST_SERIALIZATION_NVP(student);
ostreamXml.close();
}
void reconstruction(){
std::ifstream inputStream("student.xml");
boost::archive::xml_iarchive iArchive(inputStream);
Student student2(2,"dfds");
iArchive>> BOOST_SERIALIZATION_NVP(student2);
inputStream.close();
cout<<student2.takeExam(2,3);
}
在本例中,我可以重构对象,因为我知道序列化对象的类型,即Student。但是如果我不知道要进行反序列化的对象的类型呢
谢谢 您需要一个工厂对象/方法,我不记得boost::serialization是否提供了一个工厂对象/方法,或者您必须自己编写一个工厂对象/方法。首先,来自C的XML令人困惑,因为如果严格定义了格式,那么XML的创建方式根本不重要。关于反序列化,每个应用程序都应该自己控制它。如果您的流以任何顺序由各种对象组成,那么您当然应该将它们与对象类型ID一起存储。例如,使用对象类型创建一个枚举,并在序列化每个对象之前序列化一个枚举的值。在反序列化时,您将始终知道接下来将使用什么类型的对象,因为首先您将其类型反序列化为枚举值。