Frage

Ich brauche ein Programm zu schreiben, die entweder aus ifstream oder cin liest, in Abhängigkeit von Parametern in das Programm zur Laufzeit übergeben.

Ich habe geplant, auf Sie folgendermaßen vorgehen:

 istream in;

 if(argv[1] == "cin")
 {
      in = cin;
 }
 else
 {
      ifStream inFile;
      inFile.open(argv[1].c_str());
      in = inFile;
 }

Allerdings istream in geschützt, und ich kann nicht istream in deklarieren. Gibt es eine Möglichkeit eine solche in Strom generic zu erklären?

War es hilfreich?

Lösung

Versuchen Sie stattdessen mit einem istream*. Beachten Sie jedoch, dass Sie Ihren Code leicht zu ändern. Mit Zeiger Sie den Speicherbereich des Objekts erhalten müssen, die Sie zeigen. Mit anderen Worten kann die „inFile“ Variable nicht dort erklärt werden, da sie nicht aus der sonst existieren. Der Code könnte sein, dann:

 istream* in;
 ifStream inFile;

 if(!strcmp(argv[1],"cin"))
 {
      in = &cin;
 }
 else
 {
      inFile.open(argv[1]);
      in = &inFile;
 }
 // use *in

(Beachten Sie auch die Änderungen in der Zeichenfolge Handhabung. Ich änderte sie als Beispiel.)

Andere Tipps

Eine alternative Konstruktion ist der Code mit cin zu schreiben, und dann verwenden Eingabeumleitung , wenn das Programm ausgeführt wird, wenn Sie Eingabe aus einer Datei annehmen möchten. Dies gilt nicht Ihre genaue Frage beantworten, aber es ist ein einfacher Entwurf für den Fall, dass Sie präsentiert.

Zum Beispiel, anstelle von

program.exe cin

Sie würden nur ausführen

program.exe

und anstelle von

program.exe myfile.txt

Sie liefe

program.exe < myfile.txt

Dies funktioniert auf * nix und Windows.

Sie können dies auch tun, ohne die Zeiger:

ifStream inFile;
istream in( argv[1] == "cin" ? cin : inFile.open(argv[1]));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top