Espacios de nombres
Variantes
Acciones

std::ios_base::pword

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)
 
 
void*& pword( int index );

Primero asigna o cambia el tamaño del almacenamiento privado (array dinámico de void* u otra estructura de datos indexables) lo suficiente como para hacer de index un índice válido, luego devuelve una referencia al elemento void* 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 pword(), pero los valores almacenados se conservan, de modo que la lectura de pword(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 xalloc(), de lo contrario el comportamiento no está definido. Los nuevos elementos se inicializan en un puntero nulo.

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

Si los punteros almacenados en pword requieren gestión, register_callback() se puede utilizar para instalar controladores que ejecuten una copia a profundidad o desasignación según sea necesario.

[editar] Ejemplo

Utiliza el almacenamiento en pword de la clase base para identificación de tipos en tiempo de ejecución de objetos flujo derivados.

#include <iostream>
 
template<class CharT, class Traits = std::char_traits<CharT> >
class mi_flujo : public std::basic_ostream<CharT, Traits>
{
public:
    static const int xindex;
 
    mi_flujo(std::basic_ostream<CharT, Traits>& ostr) :
        std::basic_ostream<CharT, Traits>(ostr.rdbuf())
    {
        this->pword(xindex) = this;
    }
 
    void mi_funcion()
    {
        *this << "[manejo especial para mi_flujo]";
    }
};
 
// Cada especialización de mi_flujo obtiene un índice único de xalloc()
template<class CharT, class Traits>
const int mi_flujo<CharT, Traits>::xindex = std::ios_base::xalloc();
 
// Este manipulador de E/S podrá reconocer ostreams que sean de tipo mi_flujo
// buscando el puntero almacenado en pword.
template<class CharT, class Traits>
std::basic_ostream<CharT, Traits>& mi_manipulador(std::basic_ostream<CharT, Traits>& os)
{
    if (os.pword(mi_flujo<CharT, Traits>::xindex) == &os)
        static_cast<mi_flujo<CharT, Traits>&>(os).mi_funcion();
    return os;
}
 
int main()
{
    std::cout << "cout, prueba de caracteres estrechos  " << mi_manipulador << '\n';
 
    mi_flujo<char> mi_salida(std::cout);
    mi_salida << "mi_salida, prueba de caracteres estrechos  " << mi_manipulador << '\n';
 
    std::wcout << "wcout, prueba de caracteres anchos  " << mi_manipulador << '\n';
 
    mi_flujo<wchar_t> mi_salida_ancha(std::wcout);
    mi_salida_ancha << "mi_salida_ancha, prueba de caracteres anchos  " << mi_manipulador << '\n';
}

Salida:

cout, prueba de caracteres estrechos 
mi_salida, prueba de caracteres estrechos  [manejo especial para mi_flujo]
wcout, prueba de caracteres anchos 
mi_salida_ancha, prueba de caracteres anchos  [manejo especial para mi_flujo]

[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 convervara
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 accede al elemento long 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]