我正在尝试学习如何使用谷物来使用序列化/反序列化。为了进行测试,我将 3D 场景的对象序列化为 .xml 文件(毕竟,当您实际读取输出时更容易理解)。序列化工作没有问题,反序列化似乎也这样做了。当我现在想重新创建对象时,访问第一个对象没有问题……但是我如何获得其余的对象?
.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>
。但我不知道如何访问其余部分。
我很可能错过了一些明显的东西,而我在盯着它看的时候忽略了一些东西。但我也不确定以这种方式序列化数据是否是一种合理的方法。