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 ?