Pregunta

Conoces el idioma común de stdio que stdin se especifica por un nombre de archivo de "-", por ejemplo

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

¿Cuál es la mejor manera de hacer esto con un ifstream ¿instancia? He recibido un poco de código que tiene un ifstream Como parte de una clase y me gustaría agregar código para hacer el equivalente, algo como:

if ( filename == "-")
    logstream = cin;  // **how do I do this*?*
else
    logstream.open( filename.c_str() );
¿Fue útil?

Solución

cin no es un ifstream, pero si puedes usar istream En cambio, entonces estás en ganar. De lo contrario, si está preparado para no ser portátil, simplemente abra /dev/stdin o /dev/fd/0 o lo que sea. :-)


Si usted hacer Quiere ser portátil y puede hacer que su programa use istream, aquí hay una forma de hacerlo:

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

// ...

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

los noop es especificar un perjudicial que no haga nada en el cin caso, porque, bueno, cin no está destinado a ser eliminado.

Otros consejos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top