std::ios_base:: iword
|
long
&
iword
(
int
index
)
;
|
||
Primero, asigna o redimensiona el almacenamiento privado (arreglo dinámico de long u otra estructura de datos indexable) lo suficiente para hacer que index sea un índice válido, luego devuelve una referencia al elemento long 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
iword()
, pero los valores almacenados se conservan, de modo que leer desde
iword
(
index
)
con el mismo índice posteriormente producirá el mismo valor hasta la próxima llamada a
std::basic_ios::copyfmt()
. El valor puede utilizarse para cualquier propósito. El índice del elemento debe obtenerse mediante una llamada previa a
xalloc()
, de lo contrario el comportamiento es indefinido. Los nuevos elementos se inicializan a
0
.
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 |
Notas
El uso típico del almacenamiento iword es pasar información (por ejemplo, banderas de formato personalizadas) desde manipuladores de E/S definidos por el usuario hacia
operator<<
y
operator>>
definidos por el usuario, o hacia facetas de formato definidas por el usuario imbuidas en flujos estándar.
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.
Ejemplo
#include <iostream> #include <string> struct Foo { static int foo_xalloc; std::string data; Foo(const std::string& s) : data(s) {} }; // Asigna el almacenamiento iword para usar con objetos Foo int Foo::foo_xalloc = std::ios_base::xalloc(); // Este operador definido por el usuario imprime el string en reversa si iword contiene 1 std::ostream& operator<<(std::ostream& os, Foo& f) { if (os.iword(Foo::foo_xalloc) == 1) return os << std::string(f.data.rbegin(), f.data.rend()); else return os << f.data; } // Este manipulador de E/S alterna el número almacenado en iword entre 0 y 1 std::ios_base& rev(std::ios_base& os) { os.iword(Foo::foo_xalloc) = !os.iword(Foo::foo_xalloc); return os; } int main() { Foo f("example"); std::cout << f << '\n' << rev << f << '\n' << rev << f << '\n'; }
Salida:
example elpmaxe example
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
void
*
elemento en el índice dado
(función miembro pública) |
|
|
[static]
|
devuelve un entero único a nivel de programa que es seguro usar como índice para
pword()
y
iword()
(función miembro estática pública) |