std::ios_base::xalloc
static int xalloc(); | ||
Devuelve un valor de índice único (para todo el programa) que se puede utilizar para acceder a un elemento long y un elemento void* en el almacenamiento privado de std::ios_base
llamando a iword() y pword(). La llamada a xalloc
no asigna memoria.
Esta función es segura para hilos; el acceso simultáneo de varios hilos no da como resultado una carrera de datos. (desde C++14)
Incrementa efectivamente un dato miembro estático privado de std::ios_base
, como si se ejecutara return index++;, si index
es el nombre de ese miembro estático (que puede ser std::atomic para admitir el acceso simultáneo de varios hilos o sincronizarse de otro modo) (desde C++14).
Contenido |
[editar] Parámetros
(Ninguno)
[editar] Valor de retorno
Un entero único para usar como índice de pword/iword
.
[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] 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) | |
Cambia el tamaño del almacenamiento privado si es necesario y accede al elemento long en el índice dado. (función miembro pública) |