2009-08-05 9 views
0

Est-il possible d'essayer de lire à partir d'un flux, mais ne pas modifier le flux lui-même (et renvoyer booléen si c'était un succès)? Cela ne fonctionne pas parce que stringstream n'a pas de constructeur de copie publique. Comment le faire alors?Lecture non destructible à partir d'un flux

Est-il possible de le résoudre si on remplace stringstream par istream?

Répondre

1

stringstream, se référant à this vous permet d'utiliser tellg et seekg pour obtenir/position définie. Vous pouvez ainsi:
1. Obtenir la position actuelle
2. Lire
3. Définissez la position actuelle sur une, que vous venez de lire.

+1

Ne fonctionne pas sur tous les flux bien sûr. – MSalters

+0

Bien sûr :). Je me référais strictement à std :: stringstream (fonctionne aussi pour les streams sur des fichiers normaux). –

2

En général, cela est impossible. Le streambuf sous-jacent n'a pas d'interface. Cependant, vous pouvez créer un wrapper streambuf. Vous ne seriez toujours pas capable de faire des lectures non destructibles sur le flux, mais vous pourriez les faire sur votre wrapper streambuf.

(Une enveloppe streambuf est une implémentation de l'interface de std :: streambuf qui transmet son E/S à un streambuf sous-jacent)

Questions connexes