2017-01-26 2 views
-2

Comment puis-je faire fonctionner ce pseudo-code?Comment "paramétrer" un flux de sortie?

std::ostream ostr; 
std::ofstream ofstr; 

if(condition) { 
    ostr = std::cout; 
} 
else { 
    ofstr.open("file.txt"); 
    ostr = ofstr; 
} 

ostr << "Hello" << std::endl; 

Cela ne compile pas, puisque std::ostream n'a pas de constructeur par défaut public.

+0

La question liée n'est pas un en double _exact_, mais il est assez proche, et la réponse acceptée montre une solution à votre problème. – Useless

+1

Dans votre cas, vous pouvez utiliser l'opérateur ternaire: 'std :: ostream & ostr = (condition? Std :: cout: (ofstr.open (" fichier.txt "), ofstr));' – Jarod42

+0

@ Jarod42: juste essayé; cela fonctionne quand 'condition' est vrai, et j'obtiens la sortie sur cout, mais je n'obtiens aucun fichier écrit quand' condition' est faux. – Pietro

Répondre

1

Dans votre cas, vous pouvez utiliser l'opérateur ternaire:

std::ostream& ostr = (condition ? 
         std::cout : 
         (ofstr.open("file.txt"), ofstr)); // Comma operator also used 
                 // To allow fstream initialization. 
0

Cette mise en œuvre peut passer à d'autres cours d'eau:

std::ofstream ofstr; 
std::ostream *ostr; 

ofstr.open("file.txt"); 

ostr = &ofstr; 
*ostr << "test --> file\n" << std::endl; 

ostr = &std::cout; 
*ostr << "test --> stdout\n" << std::endl;