Bibliothèque IOS C ++ - rdbuf

La description

Il est utilisé pour obtenir / définir le tampon de flux. Si sb est un pointeur nul, la fonction définit automatiquement les indicateurs d'état d'erreur de badbit (qui peuvent lever une exception si des exceptions de membre ont été passées badbit).

Certaines classes de flux dérivées (telles que stringstream et fstream) maintiennent leur propre tampon de flux interne, auquel elles sont associées lors de la construction. L'appel de cette fonction pour changer le tampon de flux associé n'aura aucun effet sur ce tampon de flux interne: le flux aura un tampon de flux associé qui est différent de son tampon de flux interne (bien que les opérations d'entrée / sortie sur les flux utilisent toujours le tampon de flux associé, comme renvoyé par cette fonction membre).

Déclaration

Voici la déclaration de la fonction ios :: rdbuf.

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

Le premier formulaire (1) renvoie un pointeur vers l'objet tampon de flux actuellement associé au flux.

La seconde forme (2) définit également l'objet pointé par sb comme le tampon de flux associé au flux et efface les indicateurs d'état d'erreur.

Paramètres

sb - Pointeur vers un objet streambuf.

Valeur de retour

Un pointeur vers l'objet tampon de flux associé au flux avant l'appel.

Des exceptions

Basic guarantee- si une exception est levée, le flux est dans un état valide. Il lève une exception d'échec de type de membre si sb est un pointeur nul et que les exceptions de membre ont été définies pour lancer pour badbit.

Courses de données

Accède (1) ou modifie (2) l'objet de flux.

L'accès simultané au même objet de flux peut provoquer des courses de données.

Exemple

L'exemple ci-dessous explique la fonction 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;
}