Domanda

Conosci il comune idioma stdio che stdin è specificato da un nome file di "-", ad esempio

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

Qual è il modo migliore per farlo con un ifstream esempio? Ho ricevuto un po 'di codice che ha un ifstream Come parte di una classe e vorrei aggiungere codice per fare l'equivalente, qualcosa di simile:

if ( filename == "-")
    logstream = cin;  // **how do I do this*?*
else
    logstream.open( filename.c_str() );
È stato utile?

Soluzione

cin non è un ifstream, ma se puoi usare istream Invece, allora sei dentro per vincere. Altrimenti, se sei pronto per essere non portabile, solo aperto /dev/stdin o /dev/fd/0 o altro. :-)


Se tu fare vuoi essere portatile e può utilizzare il tuo programma istream, ecco un modo per farlo:

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

// ...

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

Il noop è specificare un deleter che non fa nulla in cin caso, perché, beh, cin non è pensato per essere eliminato.

Altri suggerimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top