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.
- Guarda el streambuf inicial de cin en una variable
- Cambie el streambuf de cin al del archivo .
- Haz lo que necesitas hacer
- Y no olvide restaurar cin streambuf antes de cerrar su archivo: RAII puede ayudar.