Quelle est la meilleure façon d'analyser ou de parcourir un istream
? J'ai besoin de créer une fonction qui prend un istream
, l'analyse et crée un objet alors je me demandais la meilleure façon de le faire. Même quelque chose qui pourrait le convertir en string
serait dandy.C++ Itérer un istream
Répondre
Vous pouvez utiliser un istream_iterator
.
typedef std::istream_iterator<std::string> streamiter;
for (streamiter it = streamiter(some_istream); it != streamiter(); it++) {
// process words
}
Cela va diviser le flux d'entrée à tous les espaces.
Étant donné que la réflexion et la persistance ne sont pas intégrées à C++, vous ne pouvez pas écrire une fonction qui lit un objet, puis affiche son objet. Vous besoin de savoir ce que vous cherchez avant main et lire cela spécifiquement. (Bien sûr, vous pouvez toujours lire les jetons et les introduire dans un analyseur syntaxique.)
Si vous savez exactement quel type d'objet lire dans le flux, il est souvent bon de donner à cette classe un constructeur prenant un std::istream&
. Etant donné que la classe est généralement l'endroit où le code à écrire dans le flux est, cela les rapproche tous les deux, ce qui est préférable pour la maintenance. Le code d'analyse crée ensuite simplement l'objet qui transmet le flux au constructeur.
Si vous ne savez pas quel type vous rencontrerez, vous devrez écrire une fonction d'analyse (probablement simple). De tels formats devraient commencer par un identifiant qui indique quel type d'objet suit. Votre fonction d'analyse doit d'abord lire cet identificateur, puis se branche sur un code qui lit le type approprié dans le flux. Puisque, à ce stade, il sait quel type d'objet lire dans le flux, la lecture des objets réels peut être implémentée dans les constructeurs comme décrit ci-dessus.
- 1. "copie carbone" un istream C++?
- 2. Comment stocker un IStream dans un fichier via C#?
- 3. Comment obtenir la longueur de IStream? C++
- 4. Opérateur istream
- 5. C++: itérer le vecteur
- 6. std :: istream :: get efficacité
- 7. itérer par datatable dans C#
- 8. Comment libérer un thread istream bloqué
- 9. télécharger un fichier en utilisant Windows IStream
- 10. Convertir ifstream en istream
- 11. par énumérations Itérer en C++ C++
- 12. Lecture depuis istream
- 13. Manipulations avec istream
- 14. Itérer via un NSArray
- 15. Itérer via un IList
- 16. Initialisation d'un membre de données istream privé en C++
- 17. C++: Itérer à travers un vecteur de vecteurs
- 18. .NET équivalent d'initialisation Delphi IStream
- 19. C# itérer sur les cas de commutation
- 20. istream de file_descriptor_source (boost :: iostreams) ou un fichier
- 21. Lecture SDL_RWops d'un std :: istream
- 22. istream Parse EVENT_TYPE (param1, param2, ...)
- 23. Comment implémenter seekg() pour un istream/streambuf personnalisé?
- 24. Itérer par liste générique en C#
- 25. Itérer par la fonction principale dans C?
- 26. C#: comment itérer le contenu d'un DataColumn?
- 27. Comment itérer sur un hachage en Ruby?
- 28. Itérer à travers un tableau
- 29. Itérer à travers un arbre
- 30. istream obtenir le comportement de la méthode
Vous êtes un gentleman et un érudit. – Louis