首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找如何访问反序列化的谷类.xml文件(Cereal、C++11)中的数据的示例

寻找如何访问反序列化的谷类.xml文件(Cereal、C++11)中的数据的示例
EN

Stack Overflow用户
提问于 2016-04-25 23:34:36
回答 1查看 886关注 0票数 0

我现在正在学习如何使用序列化/反序列化,使用的是谷类。为了进行测试,我将3D场景的对象序列化为.xml文件(毕竟,当您可以实际读取输出时,它更容易理解)。序列化没有问题,反序列化似乎也是如此。当我现在想要重新创建对象时,访问第一个one...but没有问题,我如何获得其余的?

.cpp中的序列化(略):

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
<?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>
...

等。

当我现在使用

代码语言:javascript
复制
    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>。但我完全不知道怎么才能进入剩下的部分。

这很可能是我忽略了一些显而易见的东西,我在盯着它的时候却忽略了一些东西。但我也不确定以这种方式序列化数据是否是一种合理的方法。

EN

回答 1

Stack Overflow用户

发布于 2016-04-28 02:53:35

您的问题是,每次for循环重复时,您都会创建一个新的归档。

这应该可以解决您的问题:

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36845030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档