Frage

Sie kennen die gemeinsame Stdio -Idiom, die stdin wird durch einen Dateinamen von "-" angegeben, z. B.

if ((strcmp(fname, "-"))
    fp = fopen(fname);
else
    fp = stdin;

Was ist der beste Weg, dies mit einem zu tun? ifstream Beispiel? Ich habe ein bisschen Code erhalten, das einen hat ifstream Als Teil einer Klasse und ich möchte Code hinzufügen, um das Äquivalent zu tun, so etwas wie:

if ( filename == "-")
    logstream = cin;  // **how do I do this*?*
else
    logstream.open( filename.c_str() );
War es hilfreich?

Lösung

cin ist nicht ein ifstream, aber wenn Sie verwenden können istream Stattdessen sind Sie dann dabei, zu gewinnen. Andernfalls, wenn Sie bereit sind, nicht portable zu sein, haben Sie einfach geöffnet /dev/stdin oder /dev/fd/0 oder Wasauchimmer. :-)


Wenn du tun Sie möchten tragbar sein und können Ihr Programm nutzen lassen istream, Hier ist eine Möglichkeit, es zu tun:

struct noop {
    void operator()(...) const {}
};

// ...

shared_ptr<istream> input;
if (filename == "-")
    input.reset(&cin, noop());
else
    input.reset(new ifstream(filename.c_str()));

Das noop ist ein Deleter anzugeben, der nichts in der tut cin Fall, weil, na ja, cin soll nicht gelöscht werden.

Andere Tipps

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top