std::basic_ios<CharT,Traits>:: copyfmt
|
basic_ios
&
copyfmt
(
const
basic_ios
&
other
)
;
|
||
Si other se refiere al mismo objeto que * this , no tiene efectos. De lo contrario, copia el estado del flujo other en * this . Esto se realiza en la siguiente secuencia:
iword
y
pword
en sí mismos), las funciones de retorno, y el flujo vinculado.
Contenidos |
Parámetros
| otro | - | otro flujo para usar como fuente |
Valor de retorno
* this
Notas
La segunda pasada a través de las devoluciones de llamada puede utilizarse para copiar en profundidad los objetos definidos por el usuario a los que apuntan los punteros en std::ios_base::pword .
copyfmt()
puede utilizarse para guardar y restaurar el estado de un flujo. Boost proporciona una biblioteca de
conservadores de estado de E/S
más granular para el mismo propósito.
Ejemplo
Hace que el objeto
std::ofstream
"out" se comporte exactamente como
std::cout
, incluyendo formato,
tie()
con
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'; }
Salida posible:
Hello, world 1) out2.flags(): 00000000000000000001000000000010 2) cout.flags(): 00000000000000000001000000000010 3) cout.flags(): 00000000000000000001000000001111 4) out2.flags(): 00000000000000000001000000001111
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Se aplica a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 256 | C++98 |
el paso 3 llamaba a las callbacks registradas con el
tipo de evento
copy_event
, que no está definido
|
corregido a
copyfmt_event |
| LWG 292 | C++98 |
si
other
se refiere al mismo objeto que
*
this
, los objetos miembro
aún se copiaban y las callbacks registradas aún se llamaban |
no hacer nada
en este caso |