我现在正在学习如何使用序列化/反序列化,使用的是谷类。为了进行测试,我将3D场景的对象序列化为.xml文件(毕竟,当您可以实际读取输出时,它更容易理解)。序列化没有问题,反序列化似乎也是如此。当我现在想要重新创建对象时,访问第一个one...but没有问题,我如何获得其余的?
.cpp中的序列化(略):
std::ofstream os("testdata.xml");
for (int i=0; i<alloftheobjects; i++)
{
3DObject *Object = new 3DObject;
Object->ID = ID;
Object->vertices = vectorOfPoints;
Object->triangles = vectorOfTriangles;
cereal::XMLOutputArchive archive(os);
archive(cereal::make_nvp("ID", Object->ID),
cereal::make_nvp("Points", Object->vertices),
cereal::make_nvp("Triangles", Object->triangles));
delete Object;
}它可以工作,并创建testdata.xml,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<cereal>
<ID>0111</ID>
<Points size="dynamic">
<value0 size="dynamic">
<value0>-5</value0>
<value1>-5</value1>
<value2>1</value2>
</value0>
....rest of the points
</Points >
<Triangles size="dynamic">
...triangle data
</Triangles>
</cereal>
<?xml version="1.0" encoding="utf-8"?>
<cereal>
<ID>0112</ID>
<Points size="dynamic">
...pointdata
</Points >
<Triangles size="dynamic">
...triangle data
</Triangles>
</cereal>
...等。
当我现在使用
std::ifstream is("testsdata.xml");
cereal::XMLInputArchive archive(is);
int ID;
std::vector<std::vector<double>> vertices;
std::vector<std::vector<int>> triangles;
archive(ID, vertices, triangles);为了反序列化,它编译、运行,我可以访问第一组数据(ID、顶点、三角形,直到第一个</cereal>。但我完全不知道怎么才能进入剩下的部分。
这很可能是我忽略了一些显而易见的东西,我在盯着它的时候却忽略了一些东西。但我也不确定以这种方式序列化数据是否是一种合理的方法。
发布于 2016-04-28 02:53:35
您的问题是,每次for循环重复时,您都会创建一个新的归档。
这应该可以解决您的问题:
std::ofstream os("testdata.xml");
cereal::XMLOutputArchive archive(os);
for (int i=0; i<alloftheobjects; i++)
{
3DObject *Object = new 3DObject;
Object->ID = ID;
Object->vertices = vectorOfPoints;
Object->triangles = vectorOfTriangles;
archive(cereal::make_nvp("ID", Object->ID),
cereal::make_nvp("Points", Object->vertices),
cereal::make_nvp("Triangles", Object->triangles));
delete Object;
}https://stackoverflow.com/questions/36845030
复制相似问题