std::basic_ios<CharT,Traits>:: copyfmt
|
basic_ios
&
copyfmt
(
const
basic_ios
&
other
)
;
|
||
Si other fait référence au même objet que * this , n'a aucun effet. Sinon, copie l'état du flux other dans * this . Ceci est effectué dans l'ordre suivant :
iword
et
pword
eux-mêmes), des fonctions de rappel et du flux lié.
Table des matières |
Paramètres
| autre | - | un autre flux à utiliser comme source |
Valeur de retour
* this
Notes
Le deuxième passage à travers les rappels peut être utilisé pour copier en profondeur les objets définis par l'utilisateur pointés par les pointeurs dans std::ios_base::pword .
copyfmt()
peut être utilisé pour sauvegarder et restaurer l'état d'un flux. Boost fournit une bibliothèque de
sauvegardes d'état d'E/S
plus granulaires pour le même usage.
Exemple
Fait en sorte que l'objet
std::ofstream
"out" se comporte exactement comme
std::cout
, y compris le formatage,
tie()
avec
std::cin
, etc.
#include <bitset> #include <climits> #include <fstream> #include <iostream> int main() { std::ofstream out; out.copyfmt(std::cout); // copy everything except rdstate and rdbuf out.clear(std::cout.rdstate()); // copy rdstate out.basic_ios<char>::rdbuf(std::cout.rdbuf()); // share the buffer 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); // copy everything except rdstate and rdbuf std::cout << "4) out2.flags(): " << bin(out2.flags()) << '\n'; }
Sortie possible :
Hello, world 1) out2.flags(): 00000000000000000001000000000010 2) cout.flags(): 00000000000000000001000000000010 3) cout.flags(): 00000000000000000001000000001111 4) out2.flags(): 00000000000000000001000000001111
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 256 | C++98 |
l'étape 3 appelait les callbacks enregistrés avec
le type d'événement
copy_event
, qui n'est pas défini
|
corrigé en
copyfmt_event |
| LWG 292 | C++98 |
si
other
fait référence au même objet que
*
this
, les objets membres
étaient toujours copiés et les callbacks enregistrés étaient toujours appelés |
ne rien faire
dans ce cas |