Quelles alternatives sérieuses existent pour la bibliothèque IOStream? (outre cstdio)

Je recherche une bibliothèque qui fonctionne de manière similaire à iostreams, dans la mesure où elle effectue des conversions et permet d’écrire sur des tampons de mémoire, des fichiers et la console. Cependant, je voudrais quelque chose de sûr, comme iostream. Y a-t-il des bibliothèques sérieuses qui font cela?

Être capable de spécifier l’encodage de sortie pour les choses serait un plus.

Notez que je ne suis pas intéressé par les bibliothèques qui font simplement face à iostreams car elles ajoutent simplement plus de complexité à ce que font les iostreams, par exemple boost::format .

Réponse au commentaire PreEmptive: Je ne veux pas utiliser cstdio car en utilisant ce système, il est impossible d’avoir du code indépendant de l’emplacement de sortie. C’est-à-dire que vous devez appeler une fonction pour envoyer des choses à des tampons, et vous devez appeler une autre fonction pour envoyer des choses aux fichiers, et une autre pour la console, etc.

EDIT2: En réponse à la vague de commentaires ci-dessous: j’en ai marre des deux iostreams et cstdio. Voici des raisons plus spécifiques. J’ai essayé de garder mon “coup de gueule” hors de cette question, mais les gens continuent à demander à mon si je suis hors de mon rocker, alors voici ma raison.

cstdio

  • Impossible de gérer les caractères Unicode correctement
  • Impossible d’écrire quelque chose comme une chaîne sans gérer les tampons manuellement
  • Pour être utilisable, il faut souvent prendre en charge les extensions non standard (par exemple, vsnprintf ) (EDIT: OK, la bibliothèque standard de C99 étant en C ++ 11 ajoute la plupart de ces fichiers)
  • Vous ne pouvez pas changer l’emplacement de la sortie sans changer le code d’origine (les extensions non standard, par exemple dans la glibc, vous permettent de traiter un pointeur de fichier comme un tampon, ce qui fait ça … mais c’est juste une extension non standard)
  • Rend la sécurité “amusante” (au point que des chapitres entiers sont dédiés aux documents de sécurité pour expliquer les problèmes, par exemple avec les chaînes de format de “printf” et autres)
  • Pas type sûr

iostreams

  • Lent
  • Entièrement trop compliqué pour un client. Si vous n’utilisez que ce qui est fourni avec la bibliothèque standard, c’est génial, mais il est presque impossible d’essayer d’étendre les choses. J’ai lu l’intégralité du livre “Standard C ++ IOStreams and Locales” – le seul livre apparemment disponible sur le sujet – deux fois – et je ne sais toujours pas ce qui se passe.

J’adore le concept iostreams, même l’utilisation de l’ operator<< que certaines personnes ne semblent pas aimer, mais cela me semble totalement trop élaboré. Quelqu’un ne devrait pas avoir à passer d’innombrables heures à lire des livres pour être un simple client de votre bibliothèque. Bien sûr, si vous ajoutez une nouvelle source de sortie ou quelque chose du genre, je pourrais comprendre, mais … les clients doivent être protégés de cette complexité. (N’est-ce pas pour ça qu’une bibliothèque?)

Il s’agit de la seule chose qui fait mal en C ++ et qui “fonctionne” dans d’autres langages de programmation, que je ne vois aucune raison d’être compliquée.

Vous pourriez être intéressé par la bibliothèque Fast Format . Vous pouvez également voir la comparaison sur leur site Web avec d’autres bibliothèques.

Boost Esprit Qi pour l’entrée, Boost . Esprit Karma pour la sortie. Peut lire de / écrire sur tout ce qui peut être représenté comme une plage d’iterators.