Espacios de nombres
Variantes
Acciones

std::ios_base::iword

De cppreference.com
< cpp‎ | io‎ | ios base
 
 
Biblioteca de E/S
Manipuladores de E/S
E/S estilo C
Búferes
(en desuso en C++98)
Flujos
Abstracciones
E/S de archivos
E/S de cadenas
E/S de arrays
(en desuso en C++98)
(en desuso en C++98)
(en desuso en C++98)
Salida sincronizada
Tipos
Interfaz de categoría de error
(C++11)
 
 
long& iword( int index );

Primero asigna o cambia el tamaño del almacenamiento privado (array dinámico de long u otra estructura de datos indexables) lo suficiente como para hacer de index un índice válido, luego devuelve una referencia al elemento long del almacenamiento privado con el índice index.

La referencia puede quedar invalidada por cualquier operación en este objeto ios_base, incluida otra llamada a iword(), pero los valores almacenados se conservan, de modo que la lectura de iword(index) con el mismo índice más tarde producirá el mismo valor hasta la próxima llamada a std::basic_ios::copyfmt(). El valor se puede utilizar para cualquier propósito. El índice del elemento debe obtenerse mediante una llamada previa a xalloc(), de lo contrario el comportamiento no está definido. Los nuevos elementos se inicializan en 0.

Si la función falla (posiblemente debido a un error de asignación) y *this es un subobjeto de clase base de un objeto o subobjeto basic_ios<>, llama a std::basic_ios <>::setstate(badbit) que puede generar std::ios_base::failure.

Contenido

[editar] Parámetros

index - El valor del índice del elemento.

[editar] Valor de retorno

Una referencia al elemento.

[editar] Excepciones

Puede lanzar std::ios_base::failure al establecer badbit.

[editar] Notas

El uso típico del almacenamiento de iword es pasar información (por ejemplo, indicadores de formato personalizados) desde manipuladores de E/S definidos por el usuario a operator<< y operator>> definidos por el usuario o a facetas de formato definidas imbuidas en flujos estándar.

[editar] Ejemplo

#include <iostream>
#include <string>
 
struct Foo
{
    static int foo_xalloc;
    std::string datos; 
 
    Foo(const std::string& s) : datos(s) {}
};
 
// asigna el almacenamiento de iword para su uso con objetos Foo
int Foo::foo_xalloc = std::ios_base::xalloc();
 
// Este operator<< definido por el usuario imprime la cadena al revés si iword contiene 1
std::ostream& operator<<(std::ostream& os, Foo& f)
{
    if(os.iword(Foo::foo_xalloc) == 1)
        return os << std::string(f.datos.rbegin(), f.datos.rend());
    else
        return os << f.datos;
}
 
// Este manipulador de E/S invierte el número almacenado en iword entre 0 y 1
std::ios_base& inversor(std::ios_base& os)
{
    os.iword(Foo::foo_xalloc) = !os.iword(Foo::foo_xalloc);
    return os;
}
 
int main()
{
    Foo f("ejemplo");
    std::cout << f << '\n' << inversor << f << '\n' << inversor << f << '\n';
}

Salida:

ejemplo
olpmeje
ejemplo

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 36 C++98 Era posible que el valor almacenado no se conservara si la referencia se invalidaba. El valor almacenado se conserva
hasta la próxima llamada a copyfmt().
LWG 41 C++98 La función establecía badbit por sí sola en caso de fracaso,
pero ios_base no proporcionaba dicha interfaz.
badbit se establece mediante basic_ios
(si *this es su subobjeto de clase base).

[editar] Véase también

Cambia el tamaño del almacenamiento privado si es necesario y el acceso al elemento void* en el índice dado.
(función miembro pública) [editar]
[estático]
Devuelve un entero único para todo el programa que es seguro de usar como índice para pword() e iword()
(función miembro estática pública) [editar]