Biblioteca IOS de C ++ - Pword
Descripción
Se utiliza para obtener el elemento puntero de la matriz extensible y devuelve una referencia al objeto de tipo void * que corresponde al índice idx en la matriz extensible interna.
Si idx es un índice para un nuevo elemento y la matriz extensible interna no es lo suficientemente larga (o aún no está asignada), la función la extiende (o la asigna) con tantos elementos inicializados a punteros nulos como sea necesario.
Se garantiza que la referencia devuelta es válida al menos hasta que se realice otra operación en el objeto de flujo, incluida otra llamada a pword. Una vez que se realiza otra operación, la referencia puede dejar de ser válida, aunque una llamada posterior a esta misma función con el mismo argumento idx devuelve una referencia al mismo valor dentro de la matriz extensible interna.
La matriz extensible interna es una matriz de propósito general de objetos de tipo long (si se accede con el miembro iword) o void * (si se accede con el miembro pword). Las bibliotecas pueden implementar esta matriz de diversas formas: iword y pword pueden o no compartir una matriz única, y es posible que ni siquiera sean matrices, sino alguna otra estructura de datos.
Declaración
A continuación se muestra la declaración de la función ios_base :: pword.
void*& pword (int idx);
Parámetros
idx - Un valor de índice para un elemento de la matriz extensible interna y algunas implementaciones esperan que idx sea un valor devuelto previamente por el miembro xalloc.
Valor devuelto
Este valor se devuelve como referencia a un objeto de tipo void *.
Excepciones
Basic guarantee - si se lanza una excepción, el flujo está en un estado válido.
Carreras de datos
Puede modificar el objeto de flujo. El valor devuelto también se puede utilizar para modificarlo. El acceso simultáneo al mismo objeto de flujo puede provocar carreras de datos.
Ejemplo
En el siguiente ejemplo se explica la función ios_base :: pword.
#include <iostream>
const int name_index = std::ios::xalloc();
void SetStreamName (std::ios& stream, const char* name) {
stream.pword(name_index) = const_cast<char*>(name);
}
std::ostream& StreamName (std::ostream& os) {
const char* name = static_cast<const char*>(os.pword(name_index));
if (name) os << name;
else os << "(unknown)";
return os;
}
int main() {
SetStreamName(std::cout, "standard output stream");
SetStreamName(std::cerr, "standard error stream");
std::cout << StreamName << '\n';
std::cerr << StreamName << '\n';
std::clog << StreamName << '\n';
return 0;
}
Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:
standard output stream
standard error stream
(unknown)