J'ai une fonction void write<typename T>(const T&)
qui est mise en œuvre en termes d'écriture de l'objet T à un ostream, et une fonction de correspondance T read<typename T>()
qui lit un T à partir d'un flux istream. J'utilise essentiellement iostreams comme format de sérialisation en texte brut, ce qui fonctionne bien pour la plupart des types intégrés, bien que je ne sache pas encore comment gérer efficacement std :: strings. J'aimerais aussi pouvoir écrire une séquence d'objets, par exemple void write<typename T>(const std::vector<T>&)
ou un équivalent basé sur un itérateur (bien qu'en pratique, il soit toujours utilisé avec un vecteur). Cependant, si écrire une surcharge qui itère sur les éléments et les écrit est assez facile à faire, cela n'ajoute pas assez d'informations pour permettre à l'opération de lecture correspondante de savoir comment chaque élément est délimité, ce qui est essentiellement le même problème que avoir avec un seul std :: string.La manière la plus simple de mélanger des séquences de types avec des flux internes?
Y a-t-il une seule approche qui peut fonctionner pour tous les types de base et std :: string? Ou peut-être que je peux m'en tirer avec 2 surcharges, une pour les types numériques, et une pour les cordes? (Soit en utilisant différents délimiteurs ou la chaîne en utilisant un mécanisme d'échappement delimiter, peut-être.)
EDIT: J'apprécie la tendance souvent judicieux lorsqu'ils sont confrontés à des questions comme celle-ci est-à-dire « vous ne voulez pas faire » et pour suggérer une meilleure approche, mais j'aimerais vraiment des suggestions qui se rapportent directement à ce que j'ai demandé, plutôt que ce que vous croyez que j'aurais dû demander à la place. :)
Je n'ai pas besoin d'une structure de sérialisation complète dans ce cas, mais seulement de la capacité de lire et d'écrire ces types et séquences individuels de types homogènes. – Kylotan
@Kylotan Si vous voulez aller de l'avant, je m'assoirais et réfléchirais à la façon dont vous allez traiter les cordes, qui sont en fait une sorte de séquence de types homogènes. Vous pouvez vous soucier des tableaux, etc. plus tard. –
Heureusement (ou malheureusement, selon la façon dont vous le regardez) j'ai un cas particulier pour les chaînes simples qui fonctionneront - je peux simplement lire le flux entier et l'utiliser. – Kylotan