J'essaie d'apprendre à utiliser la sérialisation/désérialisation pour le moment en utilisant des céréales. Pour tester les choses, j'ai sérialisé les objets d'une scène 3D dans un fichier .xml (c'est plus facile à comprendre quand vous pouvez réellement lire la sortie, après tout). La sérialisation fonctionne sans problèmes, et la désérialisation semble également le faire. Quand je veux maintenant recréer les objets, je n'ai aucun problème pour accéder au premier ... mais comment puis-je obtenir le reste?Recherche d'un exemple d'accès aux données dans des fichiers .erml de céréales désérialisées (Cereal, C++ 11)
sérialisation dans le cpp (en abrégé):
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;
}
Il fonctionne, et crée testdata.xml, en regardant quelque chose comme ceci:
<?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>
...
etc.
Quand je maintenant utiliser
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);
pour désérialiser, il compile, s'exécute et je peux accéder au premier ensemble de données (ID, sommets, triangles, jusqu'à la première </cereal>
. Mais je n'ai pas la moindre idée de comment je peux accéder au reste.
Il est tout à fait possible que je manque quelque chose de façon flagrante et que je néglige quelque chose en y regardant de plus près. Mais je ne suis pas sûr non plus si la sérialisation des données de cette façon est même une bonne approche.
Désolé pour répondre à cette fin. Cela ne change pas grand chose, en fait il ajoute des lignes plus étranges de ' Xml version =" 1.0 "encoding =" utf-8 "?> ' entre les jeux de données. – UnHeinz