Biblioteca C ++ IOS - Pword
Descrição
É usado para obter o elemento ponteiro do array extensível e retorna uma referência ao objeto do tipo void * que corresponde ao índice idx no array extensível interno.
Se idx for um índice para um novo elemento e o array extensível interno não for longo o suficiente (ou ainda não estiver alocado), a função o estende (ou o aloca) com tantos elementos inicializados para ponteiros nulos quanto necessário.
A referência retornada é garantida como válida pelo menos até que outra operação seja executada no objeto stream, incluindo outra chamada para pword. Depois que outra operação é executada, a referência pode se tornar inválida, embora uma chamada subsequente para essa mesma função com o mesmo argumento idx retorne uma referência para o mesmo valor dentro da matriz extensível interna.
A matriz extensível interna é uma matriz de uso geral de objetos do tipo long (se acessado com o membro iword) ou void * (se acessado com o membro pword). As bibliotecas podem implementar este array de diversas maneiras: iword e pword podem ou não compartilhar um array único, e podem nem mesmo ser arrays, mas alguma outra estrutura de dados.
Declaração
A seguir está a declaração para a função ios_base :: pword.
void*& pword (int idx);
Parâmetros
idx - Um valor de índice para um elemento da matriz extensível interna e algumas implementações esperam que idx seja um valor retornado anteriormente pelo membro xalloc.
Valor de retorno
Este valor é retornado como uma referência a um objeto do tipo void *.
Exceções
Basic guarantee - se uma exceção for lançada, o fluxo está em um estado válido.
Corridas de dados
Pode modificar o objeto de fluxo. O valor retornado também pode ser usado para modificá-lo. O acesso simultâneo ao mesmo objeto de fluxo pode causar disputas de dados.
Exemplo
No exemplo abaixo explica sobre a função 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;
}
Vamos compilar e executar o programa acima, isso produzirá o seguinte resultado -
standard output stream
standard error stream
(unknown)