2017-10-18 2 views
-1

Gibt es eine Möglichkeit, einen ifstream in einen istream umzuwandeln? Ich habe eine Funktion namens getToken(istream* br), die eine istream als Parameter akzeptiert, aber innerhalb meiner main() ich eine ifstream verwenden, um eine Datei zu lesen, und ich muss diese ifstream verwenden, um getToken aufrufen. Wie kann ich dieses Problem lösen?Wie kann ich einen ifstream in einen istream konvertieren?

+1

Sie brauchen es nicht ist * bereits * ein 'ìstream' – Galik

+0

' ifstream' ist abgeleitet von 'istream'. Du solltest es einfach an "getToken" weitergeben können. Was passiert, wenn Sie es versuchen? Zeigen Sie eine [mcve] –

+0

Zusätzlich zu Galiks Kommentar, könnten Sie 'dynamic_cast' es, wenn Sie wirklich eine' istream & 'oder' istream * 'wollten. Aber es ist nicht notwendig und fügt zusätzlichen Overhead hinzu. Siehe auch [dynamic_cast und static_cast in C++] (https://stackoverflow.com/q/2253168/608639). – jww

Antwort

4

Wie in den Kommentaren erwähnt, müssen Sie nichts Besonderes tun. Der Typ std::ifstream erbt von std::istream, so dass jede Funktion, die einen istream* übernimmt, einen Zeiger auf einen ifstream als Eingabe nehmen kann. Zum Beispiel:

string getToken(istream* stream) { 
    ... 
} 

ifstream fileStream; 
getToken(&fileStream); 

Die Stream-Klassen wurden speziell entwickelt, um Operationen wie diese möglich zu machen.

Verwandte Themen