Je suis sous linux, et fais une petite class sous emacs.
Une methode "getData" de cette classe affiche des données à l'ecran (par cout).
Il m'est demandé de fournir une méthode pour enregistrer ces données dans un fichier.
Je pensais donc faire une nouvelle methode "saveDataToFile(const string)" qui, dans un premier temps redirigerai la sortie standard vers le fichier en question, puis appelerai la methode "getData" et enfin remettrai la sortie standard à son état initial...
Est-ce qu'une ame charitable pourrait m'indiquer l'instruction pour rediriger la sortie standard vers un fichier ou vers l'écran ?
Ce n'est pas super comme technique.
Généralement on utilise un flux, et en fonction de ce qui est instancié le flux est mis dans un fichier, à l'écran, sur le réseau, etc...
Ex:
#include
#include <fstream>
#include <sstream>
void write(std::ostream& out, const std::string& msg)
{
out << msg << std::endl;
}
int main()
{
// Sur la sortie standard
write(std::cout, "Kikoo in cout");
// Sur la sortie d'erreur
write(std::cerr, "Kikoo in cerr");
// Dans un buffer de chaine de caractere
std::ostringstream ss;
write(ss, "Kikoo in string stream");
std::cout << ss.str() << std::endl;
// Dans un fichier
std::ofstream file("toto.txt");
write(file, "Kikoo in file");
return 0;
}
En prenant un peu de recul et grâce à ton commentaire, je m'aperçois qu'il vaudrait mieux faire une methode privée getData(<type de sortie>) qui effectue le traitement, et deux methodes publiques qui appellent getData avec au choix la sortie standard ou un fichier en paramètre. Malheureusement, je suis encore un peu léger en c++, donc si tu as une petite suggestion à me donner... elle sera la bienvenue.
C'est tout à fait correcte et me semble une bonne idée.
Pourrais-tu me dire si tu connais un type de paramètres qui me permettrait d'appeler une fonction en lui passant soit la sortie standard, soit un fichier de sortie ?
Ce n'est pas ce que je faisais dans mon premier exemple ?
Effectivement, il semblerait que mon code sente la bidouille à plein nez. Ceci dit, il permet d'afficher dans un fichier ou à l'écran sans avoir à "dupliquer" le code (je sais pas si je suis assez clair)
En prenant un peu de recul et grâce à ton commentaire, je m'aperçois qu'il vaudrait mieux faire une methode privée getData(<type de sortie>) qui effectue le traitement, et deux methodes publiques qui appellent getData avec au choix la sortie standard ou un fichier en paramètre. Malheureusement, je suis encore un peu léger en c++, donc si tu as une petite suggestion à me donner... elle sera la bienvenue.
Promis, dès que j'ai un peu de temps, je me penche sur le using namespace.
merci pour ta remarque...
Pourrais-tu me dire si tu connais un type de paramètres qui me permettrait d'appeler une fonction en lui passant soit la sortie standard, soit un fichier de sortie ?