> pour utiliser gettext avec ce magnifique système ?
Comme je l'ai précisé plus haut, les flux C++ sont des briques bas-niveau, rien ne t'interdit de construire un système de formattage par dessus. C'est ce que fait Boost.Format (avec des capacités supérieures à ce que propose C89/99), ou bien la classe autosprintf fourni par gettext qui en interne gère un flux C++. Tu bénéficies de la sûreté de typage tout en gardant les avantages du formatage.
> un équivalent de tee, qui sorte ta chaine à la fois sur cout et sur un fichier de log ?
À ce niveau là, la bibliothèque standard C et les flux C++ sont à égalité.
Certes le système des flux C++ est plus complexe à assimiler, mais une fois qu'on a compris, ça roule (Stroustrup a même fait un joli schéma). Pour ton exemple de tee, ça n'a rien de compliqué, il suffit de réécrire une classe héritant de std::streambuf qui redirige l'entrée vers plusieurs objets std::streambuf, et pour faire la redirection, tu utilises la méthode rdbuf pour faire la substitution. Tu peux écrire une classe héritant d'ostream pour avoir une interface plus agréable.
Boost.Iostreams facilite l'écriture de buffers, flux et filtres et fournit une collection d'objets prêt à l'emploi dont un tee.
ofstream ofs("mon_fichier.log");
tee_device<ostream, ofstream> teeDevice(cout, ofs);
stream teeStream(teeDevice);
teeStream << "comment faire un tee avec Boost, ne pas oublier de flusher le buffer !"<<std::endl;
teeStream.close();
Vachement compliqué à utiliser, non ?
Cette discussion confirme qu'une bonne partie des développeurs C++ ont une connaissance très partielle du langage y compris des bases (on parle quand même des entrées/sorties !).
Ça ne m'étonne guère, C++ en soi est ardu d'apprentissage, la plupart des formations enseigne un dialecte déprécié (le fameux C avec classes), les implémentations conformes à la norme se sont fait attendre longtemps etc...
Mais avant d'accuser C++ de tout les maux, faudrait peut-être l'apprendre correctement avant et choisir les bons outils. Aujourd'hui, un développeur C++ digne de ce nom doit être familier avec Boost ou du moins une bonne partie de Boost
[^] # Re: Une si bonne API
Posté par GeneralZod . En réponse à la dépêche Sortie de Qt 4.6. Évalué à 2.
Comme je l'ai précisé plus haut, les flux C++ sont des briques bas-niveau, rien ne t'interdit de construire un système de formattage par dessus. C'est ce que fait Boost.Format (avec des capacités supérieures à ce que propose C89/99), ou bien la classe autosprintf fourni par gettext qui en interne gère un flux C++. Tu bénéficies de la sûreté de typage tout en gardant les avantages du formatage.
> un équivalent de tee, qui sorte ta chaine à la fois sur cout et sur un fichier de log ?
À ce niveau là, la bibliothèque standard C et les flux C++ sont à égalité.
Certes le système des flux C++ est plus complexe à assimiler, mais une fois qu'on a compris, ça roule (Stroustrup a même fait un joli schéma). Pour ton exemple de tee, ça n'a rien de compliqué, il suffit de réécrire une classe héritant de std::streambuf qui redirige l'entrée vers plusieurs objets std::streambuf, et pour faire la redirection, tu utilises la méthode rdbuf pour faire la substitution. Tu peux écrire une classe héritant d'ostream pour avoir une interface plus agréable.
Boost.Iostreams facilite l'écriture de buffers, flux et filtres et fournit une collection d'objets prêt à l'emploi dont un tee.
ofstream ofs("mon_fichier.log");tee_device<ostream, ofstream> teeDevice(cout, ofs);
stream teeStream(teeDevice);
teeStream << "comment faire un tee avec Boost, ne pas oublier de flusher le buffer !"<<std::endl;
teeStream.close();
Vachement compliqué à utiliser, non ?
Cette discussion confirme qu'une bonne partie des développeurs C++ ont une connaissance très partielle du langage y compris des bases (on parle quand même des entrées/sorties !).
Ça ne m'étonne guère, C++ en soi est ardu d'apprentissage, la plupart des formations enseigne un dialecte déprécié (le fameux C avec classes), les implémentations conformes à la norme se sont fait attendre longtemps etc...
Mais avant d'accuser C++ de tout les maux, faudrait peut-être l'apprendre correctement avant et choisir les bons outils. Aujourd'hui, un développeur C++ digne de ce nom doit être familier avec Boost ou du moins une bonne partie de Boost