4 votes

Comment mettre en œuvre le formatage scoped iostream ?

J'aimerais limiter l'effet du formatage des flux d'E/S en C++, afin de pouvoir faire quelque chose comme ceci :

std::cout << std::hex << ...
if (some_condition) {
  scoped_iofmt localized(std::cout);

  std::cout << std::oct << ...
}
// outside the block, we're now back to hex

de sorte que la base, la précision, le remplissage, etc. soient rétablis à leurs valeurs précédentes à la sortie du bloc.

Voici ce que j'ai trouvé de mieux :

#include <ios>

class scoped_iofmt
{
    std::ios& io_;     // The true stream we shadow
    std::ios  dummy_;  // Dummy stream to hold format information

    public:
    explicit scoped_iofmt(std::ios& io)
                : io_(io), dummy_(0) { dummy_.copyfmt(io_); }
    ~scoped_iofmt() { try { io_.copyfmt(dummy_); } catch (...) {} }
};

... mais les iostreams c++ sont un domaine plutôt épineux, et je ne suis pas sûr de la sécurité/appropriation de ce qui précède. Est-ce dangereux ? Avez-vous (ou un tiers) déjà fait mieux ?

6voto

Chris Jester-Young Points 102876

Peut-être quelque chose comme le Boost Bibliothèque d'économie d'énergie du flux d'E/S ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X