Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++中使用Boost反序列化XML_C++_Xml_Serialization_Boost - Fatal编程技术网

如何在C++中使用Boost反序列化XML

如何在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

序列化有很多答案

< C++中的序列化/重构,这里是我的代码:

#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一起存储。例如,使用对象类型创建一个枚举,并在序列化每个对象之前序列化一个枚举的值。在反序列化时,您将始终知道接下来将使用什么类型的对象,因为首先您将其类型反序列化为枚举值。