C++ Sérialisation d'une std::map dans un fichier
J'ai un C++ STL carte, qui est une carte de type int et customType.
Le customType est un struct, qui a chaîne et une liste de chaîne de caractères, Comment puis-je sérialiser ce dans un fichier.
exemple struct:
struct customType{
string;
string;
int;
list<string>;
}
Regarde dans Boost.Archive.
Cela a déjà été répondu à des tas de fois. Par exemple ici: stackoverflow.com/questions/4422399/serialization-of-stl-class
Cela a déjà été répondu à des tas de fois. Par exemple ici: stackoverflow.com/questions/4422399/serialization-of-stl-class
OriginalL'auteur jarjarbinks | 2011-11-14
Vous devez vous connecter pour publier un commentaire.
Si vous n'avez pas peur de BOOST, essayez de STIMULER Sérialiser:
(code de modèle, voici peut-être quelques erreurs...)
Utilisation:
OriginalL'auteur Max Tkachenko
Une solution simple est à la sortie de chaque membre sur une ligne sur son propre, y compris toutes les chaînes dans la liste. Chaque enregistrement de démarrage avec la clé de la carte, et se termine par un caractère spécial ou une séquence de caractères qui ne peuvent pas être dans la liste. De cette façon, vous pouvez lire une ligne à la fois, et de connaître la première ligne est la carte de clé, la deuxième ligne de la première chaîne de la structure et ainsi de suite, et lorsque vous atteignez votre inscription spéciale de fin de séquence, vous savez la liste est fait et il est temps pour le prochain élément de la carte. Ce système rend les fichiers générés lisible, modifiable et si vous avez besoin de les modifier à l'extérieur du programme.
OriginalL'auteur Some programmer dude
Si vous demandez cela, alors vous savez déjà que vous ne pouvez pas sérialiser ce par le biais de:
Le problème a à voir avec les objets complexes (et en C++, même une variable de type string est un objet complexe), c'est à dire, les objets qui ne sont pas autonomes. En fait, même les plus simples de la sérialisation a des problèmes, qui vont de la plate-forme de compatibilité de même compilateur de compatibilité (différents rembourrages, etc.).
Une façon est d'utiliser une simple bibliothèque XML comme tinyXML:
http://www.grinninglizard.com/tinyxml/
Et écrire enregistrer au format XML, et de les restaurer à partir de XML procédures.
OriginalL'auteur Baltasarq
C++ n'ont pas de capacités de réflexion, comme Java et les autres, donc il n'y a pas "automatique" de façon de le faire. Vous aurez à faire tout le travail vous-même: ouvrez le fichier de sortie de chaque élément dans une boucle, et fermez le fichier. Aussi il n'y a pas de format standard pour les fichiers, vous devez définir celle qui répond à vos besoins. Bien sûr, il y a des bibliothèques pour vous y aider, mais ils ne font pas partie de la langue. Jetez un oeil à cette question:
Est-il possible de automatiquement sérialiser un objet C++?
Aussi jeter un oeil à:
http://s11n.net/
OriginalL'auteur Fabio Ceconello
Vous pouvez essayer ceci: cxx-prettyprint
customType
ne pas mettre en œuvre une sortie formatée opérateur (>>
), et, plus important encore, la sérialisation n'est généralement pas formaté de sortie, mais une sorte de brute, sortie binaire.Oui je l'ai fait comprendre son exigence, mais de stimuler la sérialisation ou google protobuf peut-être exagéré. D'où ma suggestion.
OriginalL'auteur yasouser