Frage:
In einem Szenario, in dem eine Funktion Nennen wir es printHex, ändert den Status von std::cout (z. B. Basis, Feldbreite usw.) und wie Können wir den ursprünglichen Zustand nach dem Funktionsaufruf wiederherstellen? Dieses Problem tritt auf, wenn die nachfolgende Ausgabe mit std::cout durch die in printHex vorgenommenen Statusänderungen beschädigt wird.
Antwort:
Um die Kontrolle über std::cout und zurückzugewinnen Wenn Sie es auf die ursprünglichen Einstellungen zurücksetzen, können wir die Funktionen von
Alternativ können wir den Wiederherstellungsprozess mithilfe der Initialisierung der Ressourcenerfassung implementieren (RAII)-Idiom zur automatischen Verwaltung der Flags. Hier ein Beispiel:
class RestoreCoutFlags { public: RestoreCoutFlags(std::ostream& stream) : _savedFlags(stream.flags()) {} ~RestoreCoutFlags() { stream.flags(_savedFlags); } operator std::streambuf*() const { return stream.rdbuf(); } private: std::ios_base::fmtflags _savedFlags; };
Mit dieser Klasse kann die Wiederherstellung wie folgt erreicht werden:
{ RestoreCoutFlags r(std::cout); // Code that modifies std::cout flags } // When the block exits, r is automatically destroyed, restoring the flags.
Das obige ist der detaillierte Inhalt vonWie kann ich den ursprünglichen Zustand von „std::cout' wiederherstellen, nachdem eine Funktion ihre Formatierungsflags geändert hat?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!