Namespaces
Variants

std::ios_base:: iword

From cppreference.net
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)