std::basic_ios<CharT,Traits>:: copyfmt
|
basic_ios
&
copyfmt
(
const
basic_ios
&
other
)
;
|
||
Wenn other auf dasselbe Objekt wie * this verweist, hat dies keine Auswirkungen. Andernfalls wird der Zustand des Streams other in * this kopiert. Dies geschieht in der folgenden Reihenfolge:
iword
- und
pword
-Zeiger selbst), der Callbacks und des gebundenen Streams erstellt.
Inhaltsverzeichnis |
Parameter
| other | - | ein weiterer Stream, der als Quelle verwendet werden soll |
Rückgabewert
* this
Hinweise
Der zweite Durchlauf durch die Callbacks kann verwendet werden, um die benutzerdefinierten Objekte, auf die die Zeiger in std::ios_base::pword zeigen, tief zu kopieren.
copyfmt()
kann verwendet werden, um den Zustand eines Streams zu speichern und wiederherzustellen. Boost bietet für denselben Zweck eine feiner abgestufte
I/O State Savers
-Bibliothek.
Beispiel
Lässt das
std::ofstream
-Objekt "out" sich genauso verhalten wie
std::cout
, einschließlich Formatierung,
tie()
an
std::cin
, usw.
#include <bitset> #include <climits> #include <fstream> #include <iostream> int main() { std::ofstream out; out.copyfmt(std::cout); // alles außer rdstate und rdbuf kopieren out.clear(std::cout.rdstate()); // rdstate kopieren out.basic_ios<char>::rdbuf(std::cout.rdbuf()); // Puffer teilen out << "Hello, world\n"; auto bin = [](std::ios_base::fmtflags f) { return std::bitset<sizeof(std::ios_base::fmtflags) * CHAR_BIT> { static_cast<unsigned long long>(f) }; }; std::ofstream out2; std::cout << "1) out2.flags(): " << bin(out2.flags()) << '\n'; std::cout << "2) cout.flags(): " << bin(std::cout.flags()) << '\n'; std::cout.setf(std::ios::hex | std::ios::fixed | std::ios::boolalpha); std::cout << "3) cout.flags(): " << bin(std::cout.flags()) << '\n'; out2.copyfmt(std::cout); // alles außer rdstate und rdbuf kopieren std::cout << "4) out2.flags(): " << bin(out2.flags()) << '\n'; }
Mögliche Ausgabe:
Hello, world 1) out2.flags(): 00000000000000000001000000000010 2) cout.flags(): 00000000000000000001000000000010 3) cout.flags(): 00000000000000000001000000001111 4) out2.flags(): 00000000000000000001000000001111
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 256 | C++98 |
Schritt 3 rief die registrierten Callbacks mit dem
Ereignistyp
copy_event
auf, der nicht definiert ist
|
korrigiert zu
copyfmt_event |
| LWG 292 | C++98 |
wenn
other
auf dasselbe Objekt wie
*
this
verweist, wurden die Memberobjekte
trotzdem kopiert und die registrierten Callbacks trotzdem aufgerufen |
in diesem Fall
nichts tun |