Changement de std::endl de mettre CR+LF au lieu de LF

Je suis en train d'écrire un programme sur une plate-forme Linux qui génère des fichiers de texte qui seront affichés sur, inévitablement, une plate-forme Windows.

Dès maintenant, en passant std::endl dans un ostream génère le caractère CR uniquement pour les retours à la ligne. Naturellement, ces fichiers texte sont incorrectes dans MS le bloc-notes.

  1. Est-il un moyen de changer std::endl tel qu'il utilise CR+LF pour le saut de ligne à la place de la FL?
  2. Je sais que je pourrais écrire mon propre manipulateur, comme win_endl, pour la génération de mes propres retours à la ligne, mais j'utilise la std::endl symbole dans beaucoup d'endroits, et comme beaucoup de programmeurs, ont tendance à faire la chose qui nécessite le moins de travail possible. Pourrais-je simplement de surcharge std::endl pour produire CR+LF, ou est-ce une idée stupide pour la maintenabilité?

NB: j'ai vérifié cette question, mais elle demande d'aller dans l'autre sens, et l'on a accepté la réponse semble plutôt incomplète.

Une autre option est d'utiliser un outil de Windows qui sait comment traiter avec le style Unix retours à la ligne (c'est à dire., presque n'importe quel éditeur autre que le bloc-notes), ou d'utiliser un outil qui convertit les fins de ligne (communément appelé unix2dos.exe ou quelque chose).
Burr - bonne idée, mais difficile à soutenir avec notre base de clients est ma réaction instinctive.
Il n'a pas à s'exécuter sur la machine du client - il y a des filtres qui vais faire la même chose sur une machine Unix. Vous pouvez avoir les fichiers de sortie produite par votre programme actuel courir à travers le filtre avant de vous emballer pour la distribution au client. Il semble hacky, mais je pense que il pourrait effectivement être moins hacky de coucher avec le C++ streamio (et c'est probablement beaucoup moins de travail).
Burr - votre deuxième point, c'est aussi une bonne idée, et que je pensais à propos un peu. Peut-être que j'ai besoin de réfléchir un peu plus. La principale raison que j'ai hésité à l'idée que je voulais vraiment garder le "filtrage" dans mon C++ application au lieu d'appeler un programme externe sur la résultante de fichier. Tournez vos commentaires en réponse à une question, et je vais vous donner un +1.
Le problème, c'est que vous avez utilisé std::endl, qui vous ne pas parce que Dans de nombreuses implémentations, la sortie standard est la ligne de tampon, et l'écriture de '\n' provoque une rougeur de toute façon, à moins que std::ios::sync_with_stdio(faux) a été exécuté. Dans ces situations, inutile endl seulement nuit à la performance de sortie de fichier, pas de sortie standard

OriginalL'auteur J. Polfer | 2009-10-30