Y at-il un moyen de convertir un ifstream
en un istream
? J'ai une fonction appelée getToken(istream* br)
qui accepte un istream
comme paramètre, mais dans mon main()
j'utilise un ifstream
pour lire un fichier, et je dois utiliser ce même ifstream
pour appeler getToken
. Comment puis-je surmonter ce problème?Comment puis-je convertir un ifstream en un istream
-1
A
Répondre
4
Comme mentionné dans les commentaires, vous n'avez pas besoin de faire quelque chose de fantaisie. Le type std::ifstream
hérite de std::istream
, donc toute fonction qui prend un istream*
peut prendre un pointeur sur ifstream
comme entrée. Par exemple:
string getToken(istream* stream) {
...
}
ifstream fileStream;
getToken(&fileStream);
Les classes de flux ont été spécialement conçues pour permettre des opérations comme celle-ci.
Vous n'en avez pas besoin c'est * déjà * un '' flux ' – Galik
'ifstream' est dérivé de' istream'. Vous devriez pouvoir le passer à 'getToken'. Qu'est-ce qui se passe quand vous essayez? Afficher un [mcve] –
En plus du commentaire de Galik, vous pouvez le 'dynamic_cast' si vous voulez vraiment un' istream & 'ou' istream * '. Mais ce n'est pas nécessaire et ajoute des frais supplémentaires. Voir aussi [dynamic_cast et static_cast en C++] (https://stackoverflow.com/q/2253168/608639). – jww