Libreria IOS C ++ - rdbuf

Descrizione

Viene utilizzato per ottenere / impostare il buffer del flusso. Se sb è un puntatore nullo, la funzione imposta automaticamente i flag di stato dell'errore badbit (che può generare un'eccezione se sono state passate eccezioni ai membri badbit).

Alcune classi di stream derivate (come stringstream e fstream) mantengono il proprio buffer di flusso interno, a cui sono associate durante la costruzione. La chiamata a questa funzione per modificare il buffer del flusso associato non avrà alcun effetto su quel buffer del flusso interno: il flusso avrà un buffer del flusso associato che è diverso dal suo buffer del flusso interno (sebbene le operazioni di input / output sui flussi utilizzino sempre il buffer del flusso associato, come restituito da questa funzione membro).

Dichiarazione

Di seguito è riportata la dichiarazione per la funzione ios :: rdbuf.

get (1)	streambuf* rdbuf() const;
set (2)	streambuf* rdbuf (streambuf* sb);

La prima forma (1) restituisce un puntatore all'oggetto buffer del flusso attualmente associato al flusso.

La seconda forma (2) imposta anche l'oggetto puntato da sb come buffer del flusso associato al flusso e cancella i flag di stato di errore.

Parametri

sb - Puntatore a un oggetto streambuf.

Valore di ritorno

Puntatore all'oggetto buffer del flusso associato al flusso prima della chiamata.

Eccezioni

Basic guarantee- se viene generata un'eccezione, il flusso è in uno stato valido. Genera un'eccezione di errore del tipo di membro se sb è un puntatore nullo e le eccezioni dei membri sono state impostate per lanciare per badbit.

Gare di dati

Accede a (1) o modifica (2) l'oggetto stream.

L'accesso simultaneo allo stesso oggetto flusso può causare gare di dati.

Esempio

Nell'esempio seguente viene illustrata la funzione ios :: rdbuf.

#include <iostream>     
#include <fstream>      

int main () {
   std::streambuf *psbuf, *backup;
   std::ofstream filestr;
   filestr.open ("test.txt");

   backup = std::cout.rdbuf();     

   psbuf = filestr.rdbuf();        
   std::cout.rdbuf(psbuf);         

   std::cout << "This is written to the file";

   std::cout.rdbuf(backup);        

   filestr.close();

   return 0;
}