std::ios_base:: pword
|
void
*
&
pword
(
int
index
)
;
|
||
Primero, asigna o redimensiona el almacenamiento privado (arreglo dinámico de void * u otra estructura de datos indexable) lo suficiente para hacer que index sea un índice válido, luego devuelve una referencia al elemento void * del almacenamiento privado con el índice index .
La referencia puede ser invalidada por cualquier operación en este
ios_base
objeto, incluyendo otra llamada a
pword()
, pero los valores almacenados se conservan, de modo que leer desde
pword
(
index
)
con el mismo índice posteriormente producirá el mismo valor hasta la siguiente llamada a
std::basic_ios::copyfmt()
. El valor puede utilizarse para cualquier propósito. El índice del elemento debe obtenerse mediante
xalloc()
, de lo contrario el comportamiento es indefinido. Los nuevos elementos se inicializan a un
puntero nulo
.
Si la función falla (posiblemente debido a un fallo de asignación) y
*
this
es un subobjeto de clase base de un objeto
basic_ios<>
o subobjeto, llama a
std::
basic_ios
<>
::
setstate
(
badbit
)
lo cual puede lanzar
std::ios_base::failure
.
Contenidos |
Parámetros
| índice | - | valor del índice del elemento |
Valor de retorno
Una referencia al elemento.
Excepciones
Puede lanzar std::ios_base::failure al establecer el badbit.
Notas
Si los punteros almacenados en
pword
requieren gestión,
register_callback()
puede usarse para instalar manejadores que ejecuten copia profunda o liberación de memoria según sea necesario.
Ejemplo
Utiliza el almacenamiento pword de la clase base para la identificación del tipo en tiempo de ejecución de objetos de flujo derivados.
#include <iostream> template<class CharT, class Traits = std::char_traits<CharT>> class mystream : public std::basic_ostream<CharT, Traits> { public: static const int xindex; mystream(std::basic_ostream<CharT, Traits>& ostr) : std::basic_ostream<CharT, Traits>(ostr.rdbuf()) { this->pword(xindex) = this; } void myfn() { *this << "[special handling for mystream]"; } }; // Each specialization of mystream obtains a unique index from xalloc() template<class CharT, class Traits> const int mystream<CharT, Traits>::xindex = std::ios_base::xalloc(); // This I/O manipulator will be able to recognize ostreams that are mystreams // by looking up the pointer stored in pword template<class CharT, class Traits> std::basic_ostream<CharT, Traits>& mymanip(std::basic_ostream<CharT, Traits>& os) { if (os.pword(mystream<CharT, Traits>::xindex) == &os) static_cast<mystream<CharT, Traits>&>(os).myfn(); return os; } int main() { std::cout << "cout, narrow-character test " << mymanip << '\n'; mystream<char> myout(std::cout); myout << "myout, narrow-character test " << mymanip << '\n'; std::wcout << "wcout, wide-character test " << mymanip << '\n'; mystream<wchar_t> mywout(std::wcout); mywout << "mywout, wide-character test " << mymanip << '\n'; }
Salida:
cout, narrow-character test myout, narrow-character test [special handling for mystream] wcout, wide-character test mywout, wide-character test [special handling for mystream]
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 36 | C++98 |
el valor almacenado podría no
conservarse si la referencia se invalida |
el valor almacenado se conserva
hasta la siguiente llamada de
copyfmt()
|
| LWG 41 | C++98 |
la función establecía badbit por sí misma en caso de fallo,
pero
ios_base
no proporciona dicha interfaz
|
badbit es establecido por
basic_ios
(si * this es su subobjeto de clase base) |
Véase también
|
redimensiona el almacenamiento privado si es necesario y accede al
long
elemento en el índice dado
(función miembro pública) |
|
|
[static]
|
devuelve un entero único en todo el programa que es seguro usar como índice para
pword()
y
iword()
(función miembro estática pública) |