En supposant que vous savez que le formatage drapeau sont effectivement utilisés, vous pouvez simplement enregistrer leur valeur d'origine et les restaurer plus tard. Lorsque l'ensemble de mise en forme des drapeaux étant changé est grande et peut-être un peu hors du contrôle de la fonction, il y a essentiellement deux approches à la fois, malheureusement, pas vraiment pas cher:
Ne pas utiliser les std::stringstream
directement mais plutôt d'utiliser un flux temporaire auquel les drapeaux de format s'appliquent:
{
std::ostream out(ss.rdbuf());
out << std::showbase << std::uppercase << std::hex << 15;
}
ss << 15;
Vous pouvez utiliser le membre copyfmt()
pour copier tous les drapeaux de mise en forme, puis restaurer ces:
std::ostream aux(0); // sadly, something stream-like is needed...
out.copyfmt(ss);
out << std::showbase << std::uppercase << std::hex << 15;
ss.copyfmt(aux);
out << 15;
Les deux approches doivent créer un flux qui est, malheureusement, pas vraiment rapide en raison de quelques synchronisations essentiellement obligatoires (principalement pour la création du membre std::locale
).
Copie possible de [réinitialisation d'une chaîne de caractères] (http://stackoverflow.com/questions/7623650/resetting-a-stringstream) – pSoLT
@pSoLT Nope! ... –