2017-10-18 28 views
-1

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

Vous n'en avez pas besoin c'est * déjà * un '' flux ' – Galik

+0

'ifstream' est dérivé de' istream'. Vous devriez pouvoir le passer à 'getToken'. Qu'est-ce qui se passe quand vous essayez? Afficher un [mcve] –

+0

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

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.