write read example c++ iostream ifstream

example - readfile c++



C++: asigna cin a una variable ifstream? (2)

Sabes el idioma común de stdio que stdin se especifica con 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 una instancia de ifstream ? 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() );


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

Si quiere ser portátil y puede hacer que su programa use istream , aquí hay una manera 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()));

El noop es especificar un eliminador que no hace nada en el caso de cin , porque, bueno, cin no está destinado a ser eliminado.