Heim > Backend-Entwicklung > C++ > Wie kann ich den ursprünglichen Zustand von „std::cout' wiederherstellen, nachdem eine Funktion ihre Formatierungsflags geändert hat?

Wie kann ich den ursprünglichen Zustand von „std::cout' wiederherstellen, nachdem eine Funktion ihre Formatierungsflags geändert hat?

Patricia Arquette
Freigeben: 2024-12-06 22:17:15
Original
146 Leute haben es durchsucht

How Can I Restore the Original State of `std::cout` After a Function Modifies Its Formatting Flags?

Wiedererlangung der Kontrolle: Wiederherstellung der Integrität von std::cout

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 nutzen. Header (oder Header). Dieser Wiederherstellungsprozess umfasst zwei wichtige Schritte:

  1. Erfassen Sie den aktuellen Status: Rufen Sie mit std::ios_base::fmtflags f(cout.flags()) die aktuellen Formatierungsflags ab und speichern Sie sie in einer Variablen namens f. Dadurch wird der Status von std::cout erfasst, bevor er von printHex geändert werden kann.
  2. Ursprünglichen Status wiederherstellen: Sobald printHex seine Aufgabe abgeschlossen hat, können wir die ursprünglichen Einstellungen von std wiederherstellen ::cout durch Aufrufen von cout.flags(f). Diese Aktion setzt std::cout auf den Zustand zurück, den es vor dem Funktionsaufruf hatte, und stellt so sicher, dass nachfolgende Ausgabevorgänge wie erwartet funktionieren.

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;
};
Nach dem Login kopieren

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.
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage