C++: attribuer cin pour un ifstream variable?
Vous savez la commune stdio idiome que stdin
est spécifié par
un nom de fichier "-", par exemple
if ((strcmp(fname, "-"))
fp = fopen(fname);
else
fp = stdin;
Quelle est la meilleure façon de le faire avec un ifstream
exemple? J'ai reçu
un peu de code qui a un ifstream
dans le cadre d'une classe et j'avais
comme pour ajouter du code pour faire l'équivalent, quelque chose comme:
if ( filename == "-")
logstream = cin; //**how do I do this*?*
else
logstream.open( filename.c_str() );
OriginalL'auteur Mark Harrison | 2010-01-29
Vous devez vous connecter pour publier un commentaire.
cin
n'est pas unifstream
, mais si vous pouvez utiliseristream
au lieu de cela, alors vous êtes dedans pour gagner. Sinon, si vous êtes prêt à être non-portable, il suffit d'ouvrir/dev/stdin
ou/dev/fd/0
ou quoi que ce soit. 🙂Si vous ne voulez être portable, et peuvent rendre votre programme d'utilisation
istream
, voici une façon de le faire:La
noop
est de spécifier un deleter, qui ne fait rien dans lacin
cas, parce que, eh bien,cin
n'est pas destiné à être supprimé.cet exemple illustre comment la personne n'est jamais assis et fait à mi-chemin décent ensemble de c++ libs. (je dirais boost si il n'y avait pas vraiment beaucoup de problèmes de gestion des versions)
FWIW, avec C++11 au lieu de passer
noop()
àreset
(et la définition de la structure), un simple (et drôle à la recherche)[](...){}
t-il.Yep. Aller lambdas!
OriginalL'auteur Chris Jester-Young
En effet. Nous ne pouvons pas changer le streambuf d'un ifstream comme ça. Comme Chris Bouffon,-les Jeunes de la solution, le type exact du flux utilisé doit être changé.
OriginalL'auteur Luc Hermitte