Libreria IOS C ++ - Pword

Descrizione

Viene utilizzato per ottenere l'elemento puntatore di un array estensibile e restituisce un riferimento all'oggetto di tipo void * che corrisponde all'indice idx nell'array estensibile interno.

Se idx è un indice di un nuovo elemento e l'array estensibile interno non è abbastanza lungo (o non è ancora allocato), la funzione lo estende (o lo alloca) con tutti gli elementi inizializzati a puntatori nulli necessari.

Il riferimento restituito è garantito per essere valido almeno fino a quando non viene eseguita un'altra operazione sull'oggetto stream, inclusa un'altra chiamata a pword. Una volta eseguita un'altra operazione, il riferimento potrebbe non essere più valido, sebbene una chiamata successiva a questa stessa funzione con lo stesso argomento idx restituisca un riferimento allo stesso valore all'interno dell'array estensibile interno.

L'array estensibile interno è un array generico di oggetti di tipo long (se si accede con il membro iword) o void * (se si accede con il membro pword). Le biblioteche possono implementare questo array in diversi modi: iword e pword possono condividere o meno un array univoco, e possono anche non essere array, ma qualche altra struttura di dati.

Dichiarazione

Di seguito è riportata la dichiarazione per la funzione ios_base :: pword.

void*& pword (int idx);

Parametri

idx - Un valore di indice per un elemento dell'array estensibile interno e alcune implementazioni prevedono che idx sia un valore precedentemente restituito dal membro xalloc.

Valore di ritorno

Questo valore viene restituito come riferimento a un oggetto di tipo void *.

Eccezioni

Basic guarantee - se viene generata un'eccezione, il flusso è in uno stato valido.

Gare di dati

Può modificare l'oggetto stream. Il valore restituito può essere utilizzato anche per modificarlo. L'accesso simultaneo allo stesso oggetto flusso può causare gare di dati.

Esempio

Nell'esempio seguente viene illustrata la funzione 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;
}

Compiliamo ed eseguiamo il programma sopra, questo produrrà il seguente risultato:

standard output stream
standard error stream
(unknown)