Je voudrais champ limite l'effet de la mise en forme de flux E/S en C++, pour que je puisse faire quelque chose comme ceci:Comment implémenter le formatage iostream étendu?
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 telle sorte que la base, la précision de remplissage, etc. sont restaurés leurs valeurs précédentes à la sortie du bloc.
Voici le meilleur que je suis venu avec:
#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 C++ iostreams sont un domaine épineux, et je ne suis pas sûr de la sécurité/pertinence de ce qui précède. Est-ce dangereux? Avez-vous (ou avez un tiers) déjà fait mieux?
Oui, ça ira plutôt bien, merci. – pilcrow