Also weiß ich, dass ich die Formatierungsänderungen, die ich mit iomanip gemacht habe, oft zurücksetzen wollte. Ich habe eine Klasse erstellt, die Sie verwenden können, um die Formatierung eines Ostream-Objekts wie std :: cout oder fstream-Objekte zum Schreiben/Lesen von Dateien zu erhalten. Ich mache das hauptsächlich für die Praxis und um anderen zu helfen, die das gleiche Problem haben.Klasse, die alle mit iomanip vorgenommenen Änderungen zurücksetzt: setprecision, setfill und die Flags in einem Aufruf
Alles, was Sie tun müssen, ist ein Objekt mit der Klasse ResetIOmanip erstellen. Wenn Sie es ohne Parameter erstellen, wird standardmäßig std :: cout verwendet. Sie können ostream/istream-Objekte als Parameter einfügen und es wird für die Dateien funktionieren. Stellen Sie sicher, dass Sie es aufrufen, bevor Sie Formatänderungen vornehmen. Wenn dies abgeschlossen ist, rufen Sie die Memberfunktion resetAll() vom Objekt auf, und die Flags werden zurückgesetzt, die Genauigkeit zurückgesetzt und das Füllzeichen zurückgesetzt.
Bitte zögern Sie nicht zu kommentieren, wie ich meine Header-Datei verbessern kann. Ich lerne immer noch und suche immer nach konstruktiver Kritik. Vielen Dank. Hier
Ich finde Sachen wie diese sind nützlich. Hier ist eine Variante, die ich in letzter Zeit verwendet habe: https://github.com/HowardHinnant/date/blob/master/date.h#L850-L875 Es speichert nicht "Präzision", nur weil ich es nicht brauchte. Das könnte leicht hinzugefügt werden (und ich sollte wahrscheinlich). Sie können anstelle von 'ostream *' und 'istream' '' std :: ios * 'verwenden (beide stammen von' ios' und dort wird die Formatierung gespeichert). Ich stelle im Destruktor wieder her. So wird es immer gemacht, auch in Ausnahmefällen. Deshalb mache ich meinen Resetter nicht kopierbar. –