Dela via


basic_streambuf-klass

Beskriver en abstrakt basklass för att härleda en strömbuffert, som styr överföringen av element till och från en specifik representation av en ström.

Syntax

template <class Elem, class Tr = char_traits<Elem>>
class basic_streambuf;

Parameterar

Elem
En char_type.

Tr
Tecknet traits_type.

Anmärkningar

Klassmallen beskriver en abstrakt basklass för att härleda en strömbuffert, som styr överföringen av element till och från en specifik representation av en dataström. Ett objekt i klassen basic_streambuf hjälper till att styra en ström med element av typen Tr, även kallat char_type, vars karaktärsdrag bestäms av klassen char_traits, även kallat traits_type.

Varje strömbuffert styr konceptuellt två oberoende strömmar: en för extrahering (indata) och en för infogningar (utdata). En specifik representation kan dock göra endera eller båda dessa strömmar otillgängliga. Den upprätthåller vanligtvis en viss relation mellan de två strömmarna. Det du infogar i utdataströmmen för en basic_stringbuf<Elem, Tr> objekt, till exempel, är vad du senare extraherar från dess indataström. När du placerar en ström av en basic_filebuf<Elem objekt Tr> placerar du den andra strömmen tillsammans.

Det offentliga gränssnittet till klassmallen basic_streambuf tillhandahåller de åtgärder som är gemensamma för alla dataströmbuffertar, men specialiserade. Det skyddade gränssnittet tillhandahåller de åtgärder som krävs för en specifik representation av en dataström för att utföra sitt arbete. Med de skyddade funktionerna för virtuella medlemmar kan du skräddarsy beteendet för en härledd dataströmbuffert för en specifik representation av en dataström. Varje härledd dataströmbuffert i det här biblioteket beskriver hur den specialiserar sig på beteendet för sina skyddade virtuella medlemsfunktioner. Standardbeteendet för basklassen, som ofta inte gör någonting, beskrivs i den här artikeln.

De återstående skyddade medlemsfunktionerna styr kopiering till och från lagring som tillhandahålls till buffertöverföringar till och från strömmar. En indatabuffert kännetecknas till exempel av:

  • eback, en pekare till början av bufferten.

  • gptr, en pekare till nästa element att läsa.

  • egptr, en pekare förbi slutet av bufferten.

På samma sätt kännetecknas en utdatabuffert av:

  • pbase, en pekare till början av bufferten.

  • pptr, en pekare till nästa element att skriva.

  • epptr, en pekare förbi slutet av bufferten.

För alla buffertar används följande protokoll:

  • Om nästa pekare är null finns det ingen buffert. Annars pekar alla tre pekare i samma sekvens. De kan jämföras på ett säkert sätt för beställning.

  • Om nästa pekare jämför mindre än slutpekaren för en utdatabuffert kan du lagra ett element på den skrivposition som anges av nästa pekare.

  • Om nästa pekare jämför mindre än slutpekaren för en indatabuffert kan du läsa ett element vid den läsposition som anges av nästa pekare.

  • För en indatabuffert kan du, om startpekaren jämför mindre än nästa pekare, lägga tillbaka ett element vid den putback-position som anges av den decrementerade nästa pekaren.

Alla skyddade virtuella medlemsfunktioner som du skriver för en klass som härletts från basic_streambuf<ElemTr> måste samarbeta för att upprätthålla det här protokollet.

Ett objekt i klassen basic_streambuf<Elem, Tr> lagrar de sex pekare som beskrivits tidigare. Det lagrar också ett nationella objekt i ett objekt av typen språkvariant för potentiell användning av en härledd dataströmbuffert.

Konstruktörer

Konstruktor Beskrivning
basic_streambuf Konstruerar ett objekt av typen basic_streambuf.

Typedefs

Typnamn Beskrivning
char_type Associerar ett typnamn med mallparametern Elem .
int_type Associerar ett typnamn inom basic_streambuf omfånget med mallparametern Elem .
off_type Associerar ett typnamn inom basic_streambuf omfånget med mallparametern Elem .
pos_type Associerar ett typnamn inom basic_streambuf omfånget med mallparametern Elem .
traits_type Associerar ett typnamn med mallparametern Tr .

Medlemsfunktioner

Medlemsfunktion Beskrivning
eback En skyddad funktion som returnerar en pekare till början av indatabufferten.
egptr En skyddad funktion som returnerar en pekare förbi slutet av indatabufferten.
epptr En skyddad funktion som returnerar en pekare förbi slutet av utdatabufferten.
gbump En skyddad funktion som lägger count till nästa pekare för indatabufferten.
getloc Hämtar objektets basic_streambuf nationella inställningar.
gptr En skyddad funktion som returnerar en pekare till nästa element i indatabufferten.
genomsyra En skyddad virtuell funktion som anropas av pubimbue.
in_avail Returnerar antalet element som är redo att läsas från bufferten.
svämma över En skyddad virtuell funktion som kan anropas när ett nytt tecken infogas i en fullständig buffert.
pbackfail En skyddad virtuell medlemsfunktion som försöker placera tillbaka ett element i indataströmmen och sedan göra det till det aktuella elementet (pekat på nästa pekare).
pbase En skyddad funktion som returnerar en pekare till början av utdatabufferten.
pbump En skyddad funktion som lägger count till nästa pekare för utdatabufferten.
pptr En skyddad funktion som returnerar en pekare till nästa element i utdatabufferten.
pubimbue Anger objektets basic_streambuf nationella inställningar.
pubseekoff Anropar seekoff, en skyddad virtuell funktion som åsidosätts i en härledd klass.
pubseekpos Anropar seekpos, en skyddad virtuell funktion som åsidosätts i en härledd klass och återställer den aktuella pekarpositionen.
pubsetbuf Anropar setbuf, en skyddad virtuell funktion som åsidosätts i en härledd klass.
pubsync Anropar synkronisering, en skyddad virtuell funktion som åsidosätts i en härledd klass och uppdaterar den externa dataström som är associerad med den här bufferten.
sbumpc Läser och returnerar det aktuella elementet och flyttar strömpekaren.
seekoff Den skyddade virtuella medlemsfunktionen försöker ändra de aktuella positionerna för de kontrollerade strömmarna.
seekpos Den skyddade virtuella medlemsfunktionen försöker ändra de aktuella positionerna för de kontrollerade strömmarna.
setbuf Den skyddade virtuella medlemsfunktionen utför en åtgärd som är specifik för varje härledd dataströmbuffert.
setg En skyddad funktion som lagrar _Gbeg i startpekaren, _Gnext i nästa pekare och _Gend i slutpekaren för indatabufferten.
setp En skyddad funktion som lagrar _Pbeg i startpekaren och _Pend i slutpekaren för utdatabufferten.
sgetc Returnerar aktuellt element utan att ändra position i strömmen.
sgetn Returnerar antalet lästa element.
showmanyc Skyddad virtuell medlemsfunktion som returnerar antalet tecken som kan extraheras från indataströmmen. Det säkerställer också att programmet inte får vänta på obestämd tid.
snextc Läser det aktuella elementet och returnerar följande element.
sputbackc Placerar en char_type i strömmen.
sputc Placerar ett tecken i strömmen.
sputn Placerar en teckensträng i strömmen.
stossc Gå förbi det aktuella elementet i strömmen.
sungetc Hämtar ett tecken från strömmen.
växla Byter ut värdena i det här objektet mot värdena i den angivna basic_streambuf objektparametern.
synkronisering En skyddad virtuell funktion som försöker synkronisera de kontrollerade strömmarna med eventuella associerade externa strömmar.
uflow En skyddad virtuell funktion som extraherar det aktuella elementet från indataströmmen.
Underflödet En skyddad virtuell funktion som extraherar det aktuella elementet från indataströmmen.
xsgetn En skyddad virtuell funktion som extraherar element från indataströmmen.
xsputn En skyddad virtuell funktion som infogar element i utdataströmmen.

Operatörer

Operatör Beskrivning
operator= Tilldelar värdena för det här objektet från ett annat basic_streambuf objekt.

Kravspecifikation

Rubrik:<streambuf>

namnområde: std

basic_streambuf::basic_streambuf

Konstruerar ett objekt av typen basic_streambuf.

basic_streambuf();

basic_streambuf(const basic_streambuf& right);

Parameterar

rätt
En lvalue-referens till objektet basic_streambuf som används för att ange värdena för det här basic_streambuf objektet.

Anmärkningar

Den första skyddade konstruktorn lagrar en nullpekare i alla pekare som styr indatabufferten och utdatabufferten. Den lagrar locale::classic även i nationella objekt. Mer information finns i språkvariant::classic.

Den andra skyddade konstruktorn kopierar pekarna och nationella inställningar från höger.

basic_streambuf::char_type

Associerar ett typnamn med mallparametern Elem .

typedef Elem char_type;

basic_streambuf::eback

En skyddad funktion som returnerar en pekare till början av indatabufferten.

char_type *eback() const;

Returvärde

En pekare till början av indatabufferten.

basic_streambuf::egptr

En skyddad funktion som returnerar en pekare förbi slutet av indatabufferten.

char_type *egptr() const;

Returvärde

En pekare förbi slutet av indatabufferten.

basic_streambuf::epptr

En skyddad funktion som returnerar en pekare förbi slutet av utdatabufferten.

char_type *epptr() const;

Returvärde

En pekare förbi slutet av utdatabufferten.

basic_streambuf::gbump

En skyddad funktion som lägger till antal till nästa pekare för indatabufferten.

void gbump(int count);

Parameterar

antal
Hur mycket pekaren ska föras framåt.

basic_streambuf::getloc

Hämtar basic_streambuf-objektets nationella inställningar.

locale getloc() const;

Returvärde

Det lagrade nationella objektet.

Anmärkningar

Relaterad information finns i ios_base::getloc.

Exempel

// basic_streambuf_getloc.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   cout << cout.rdbuf( )->getloc( ).name( ).c_str( ) << endl;
}
C

basic_streambuf::gptr

En skyddad funktion som returnerar en pekare till nästa element i indatabufferten.

char_type *gptr() const;

Returvärde

En pekare till nästa element i indatabufferten.

basic_streambuf::imbue

En skyddad virtuell funktion som anropas av pubimbue.

virtual void imbue(const locale& _Loc);

Parameterar

_Loc
En referens till ett språk.

Anmärkningar

Standardbeteendet är att inte göra någonting.

basic_streambuf::in_avail

Returnerar antalet element som är redo att läsas från bufferten.

streamsize in_avail();

Returvärde

Antalet element som är redo att läsas från bufferten.

Anmärkningar

Om en läsposition är tillgänglig returnerar medlemsfunktionen egptr - gptr. Annars returneras showmanyc.

Exempel

// basic_streambuf_in_avail.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   char c;
   // cin's buffer is empty, in_avail will return 0
   cout << cin.rdbuf( )->in_avail( ) << endl;
   cin >> c;
   cout << cin.rdbuf( )->in_avail( ) << endl;
}

basic_streambuf::int_type

Associerar ett typnamn inom basic_streambuf omfång med en av typerna i en mallparameter.

typedef typename traits_type::int_type int_type;

basic_streambuf::off_type

Associerar ett typnamn inom basic_streambuf omfång med en av typerna i en mallparameter.

typedef typename traits_type::off_type off_type;

basic_streambuf::operator=

Tilldelar värdena för det här objektet från ett annat basic_streambuf objekt.

basic_streambuf& operator=(const basic_streambuf& right);

Parameterar

rätt
En lvalue-referens till objektet basic_streambuf som används för att tilldela värden till det här objektet.

Anmärkningar

Den skyddade medlemsoperatorn kopierar från höger pekarna som styr indatabufferten och utdatabufferten. Den lagrar right. även getloc() i locale object. Den returnerar *this.

basic_streambuf::overflow

En skyddad virtuell funktion som kan anropas när ett nytt tecken infogas i en fullständig buffert.

virtual int_type overflow(int_type _Meta = traits_type::eof());

Parameterar

_Meta
Tecknet som ska infogas i bufferten eller traits_type::eof.

Returvärde

Om funktionen inte kan lyckas returnerar den traits_type::eof eller genererar ett undantag. Annars returneras traits_type::not_eof(_ Meta). Standardbeteendet är att returnera traits_type::eof.

Anmärkningar

Om _Meta inte jämförs med traits_type::eof försöker funktionen för den skyddade virtuella medlemmen infoga elementet traits_type::to_char_type(_Meta) i utdataströmmen. Det kan göra det på olika sätt:

  • Om en write position är tillgänglig kan den lagra elementet i skrivpositionen och öka nästa pekare för utdatabufferten.

  • Det kan göra en skrivposition tillgänglig genom att allokera ny eller ytterligare lagring för utdatabufferten.

  • Det kan göra en skrivposition tillgänglig genom att skriva ut, till något externt mål, vissa eller alla element mellan början och nästa pekare för utdatabufferten.

Funktionen för virtuellt spill, tillsammans med funktionerna för synkronisering och underflöde , definierar egenskaperna för klassen streambuf-derived. Varje härledd klass kan implementera spill på olika sätt, men gränssnittet med den anropande strömklassen är detsamma.

Funktionen overflow anropas oftast av offentliga streambuf funktioner som och sputc när put-området är fullt, men andra klasser, inklusive strömklasserna, kan anropa sputn när som overflow helst.

Funktionen använder tecknen i put-området mellan pekarna pbase och pptr och initierar sedan om put-området. Funktionen overflow måste också förbruka nCh (om nCh inte ), EOFeller så kan den välja att placera tecknet i det nya put-området så att det används vid nästa anrop.

Definitionen av användning varierar mellan härledda klasser. Klassen skriver till exempel filebuf sina tecken till en fil, medan strstreambuf klassen håller dem i sin buffert och (om bufferten är avsedd som dynamisk) expanderar bufferten som svar på ett anrop till spill. Denna expansion uppnås genom att frigöra den gamla bufferten och ersätta den med en ny, större. Pekarna justeras efter behov.

basic_streambuf::p backfail

En skyddad virtuell medlemsfunktion som försöker placera tillbaka ett element i indataströmmen och sedan göra det till det aktuella elementet (pekat på nästa pekare).

virtual int_type pbackfail(int_type _Meta = traits_type::eof());

Parameterar

_Meta
Tecknet som ska infogas i bufferten eller traits_type::eof.

Returvärde

Om funktionen inte kan lyckas returnerar den traits_type::eof eller genererar ett undantag. Annars returneras något annat värde. Standardbeteendet är att returnera traits_type::eof.

Anmärkningar

Om _Meta jämförs med traits_type::eof är elementet som ska push-överföras i praktiken det som redan finns i strömmen före det aktuella elementet. Annars ersätts elementet med traits_type::to_char_type(_Meta). Funktionen kan återställa ett element på olika sätt:

  • Om en putback-position är tillgänglig kan den lagra elementet i återställningspositionen och minska nästa pekare för indatabufferten.

  • Det kan göra en återställningsposition tillgänglig genom att allokera ny eller ytterligare lagring för indatabufferten.

  • För en strömbuffert med vanliga indata- och utdataströmmar kan den göra en återställningsposition tillgänglig genom att skriva ut, till något externt mål, vissa eller alla element mellan början och nästa pekare för utdatabufferten.

basic_streambuf::p base

En skyddad funktion som returnerar en pekare till början av utdatabufferten.

char_type *pbase() const;

Returvärde

En pekare till början av utdatabufferten.

basic_streambuf::p bump

En skyddad funktion som lägger till antal till nästa pekare för utdatabufferten.

void pbump(int count);

Parameterar

antal
Antalet tecken som skrivpositionen ska flyttas framåt med.

basic_streambuf::p os_type

Associerar ett typnamn inom basic_streambuf omfång med en av typerna i en mallparameter.

typedef typename traits_type::pos_type pos_type;

basic_streambuf::p ptr

En skyddad funktion som returnerar en pekare till nästa element i utdatabufferten.

char_type *pptr() const;

Returvärde

En pekare till nästa element i utdatabufferten.

basic_streambuf::p ubimbue

Anger basic_streambuf-objektets nationella inställningar.

locale pubimbue(const locale& _Loc);

Parameterar

_Loc
En referens till ett språk.

Returvärde

Det tidigare värdet som lagras i språkvariantobjektet.

Anmärkningar

Medlemsfunktionen lagrar _ Loc i språkobjektet och anropar imbue.

Exempel

Se basic_ios::imbue för ett exempel som använder pubimbue.

basic_streambuf::p ubseekoff

Anropar seekoff, en skyddad virtuell funktion som åsidosätts i en härledd klass.

pos_type pubseekoff(off_type _Off,
    ios_base::seekdir _Way,
    ios_base::openmode _Which = ios_base::in | ios_base::out);

Parameterar

_Bort
Positionen att söka efter i förhållande till _Way.

_Väg
Startpunkten för förskjutningsåtgärder. Se seekdir för möjliga värden.

_Vilken
Anger läget för pekarpositionen. Standardinställningen är att du kan ändra läs- och skrivpositionerna.

Returvärde

Returnerar den nya positionen eller en ogiltig strömposition (seekoff(_ Av, _Way, _Which)).

Anmärkningar

Flyttar pekaren i förhållande till _Way.

basic_streambuf::p ubseekpos

Anropar seekpos, en skyddad virtuell funktion som åsidosätts i en härledd klass, och återställer den aktuella pekarpositionen.

pos_type pubseekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);

Parameterar

_Sp
Positionen att söka efter.

_Vilken
Anger läget för pekarpositionen. Standardinställningen är att du kan ändra läs- och skrivpositionerna.

Returvärde

Den nya positionen eller en ogiltig strömposition. Om du vill avgöra om strömpositionen är ogiltig jämför du returvärdet med pos_type(off_type(-1)).

Anmärkningar

Medlemsfunktionen returnerar seekpos(_ Sp, _Which).

basic_streambuf::p ubsetbuf

Anropar setbuf, en skyddad virtuell funktion som åsidosätts i en härledd klass.

basic_streambuf<Elem, Tr> *pubsetbuf(
    char_type* _Buffer,
    streamsize count);

Parameterar

_Buffert
En pekare till char_type för den här instansieringen.

antal
Buffertens storlek.

Returvärde

Returnerar setbuf(_Buffer, count).

basic_streambuf::p ubsync

Anropar synkronisering, en skyddad virtuell funktion som åsidosätts i en härledd klass och uppdaterar den externa dataström som är associerad med den här bufferten.

int pubsync();

Returvärde

Returnerar synkronisering eller -1 vid fel.

basic_streambuf::sbumpc

Läser och returnerar det aktuella elementet och flyttar strömpekaren.

int_type sbumpc();

Returvärde

Det aktuella elementet.

Anmärkningar

Om en läsposition är tillgänglig returnerar medlemsfunktionen traits_type::to_int_type(*gptr) och ökar nästa pekare för indatabufferten. Annars returneras uflow.

Exempel

// basic_streambuf_sbumpc.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   int i = 0;
   i = cin.rdbuf( )->sbumpc( );
   cout << i << endl;
}
3
33
51

basic_streambuf::seekoff

En skyddad virtuell medlemsfunktion som försöker ändra de aktuella positionerna för de kontrollerade strömmarna.

virtual pos_type seekoff(
    off_type _Off,
    ios_base::seekdir _Way,
    ios_base::openmode _Which = ios_base::in | ios_base::out);

Parameterar

_Bort
Positionen att söka efter i förhållande till _Way.

_Väg
Startpunkten för förskjutningsåtgärder. Se seekdir för möjliga värden.

_Vilken
Anger läget för pekarpositionen. Standardinställningen är att du kan ändra läs- och skrivpositionerna.

Returvärde

Returnerar den nya positionen eller en ogiltig strömposition (seekoff (_ Av, _Way, _Which)).

Anmärkningar

Den nya positionen bestäms på följande sätt:

  • Om _Way == ios_base::begär den nya positionen början på strömmen plus _ Av.

  • Om _Way == ios_base::curär den nya positionen den aktuella strömpositionen plus _ Av.

  • Om _Way == ios_base::endär den nya positionen slutet på strömmen plus _ Av.

Om vilken &ios_base::in inte är noll påverkas indataströmmen, och om vilken &ios_base::out inte är noll påverkas utdataströmmen. Den faktiska användningen av den här parametern varierar dock mellan härledda dataströmbuffertar.

Om funktionen lyckas ändra strömpositionen eller positionerna returnerar den resulterande strömpositionen eller någon av de resulterande strömpositionerna. Annars returneras en ogiltig strömposition. Standardbeteendet är att returnera en ogiltig strömposition.

basic_streambuf::seekpos

En skyddad virtuell medlemsfunktion som försöker ändra de aktuella positionerna för de kontrollerade strömmarna.

virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);

Parameterar

_Sp
Positionen att söka efter.

_Vilken
Anger läget för pekarpositionen. Standardinställningen är att du kan ändra läs- och skrivpositionerna.

Returvärde

Den nya positionen eller en ogiltig strömposition. Om du vill avgöra om strömpositionen är ogiltig jämför du returvärdet med pos_type(off_type(-1)).

Anmärkningar

Den nya positionen är _ Sp.

Om vilken &ios_base::in inte är noll påverkas indataströmmen, och om vilken &ios_base::out inte är noll påverkas utdataströmmen. Den faktiska användningen av den här parametern varierar dock mellan härledda dataströmbuffertar.

Om funktionen lyckas ändra strömpositionen eller positionerna returnerar den resulterande strömpositionen eller någon av de resulterande strömpositionerna. Annars returneras en ogiltig strömposition (-1). Standardbeteendet är att returnera en ogiltig strömposition.

basic_streambuf::setbuf

En skyddad virtuell medlemsfunktion som utför en åtgärd som är specifik för varje härledd dataströmbuffert.

virtual basic_streambuf<Elem, Tr> *setbuf(
    char_type* _Buffer,
    streamsize count);

Parameterar

_Buffert
Pekare till en buffert.

antal
Buffertens storlek.

Returvärde

Standardbeteendet är att returnera this.

Anmärkningar

Se basic_filebuf. setbuf innehåller ett minnesområde som streambuf objektet ska använda. Hur bufferten används i definierade i de härledda klasserna.

basic_streambuf::setg

En skyddad funktion som lagrar _ Gbeg i startpekaren, _Gnext i nästa pekare och _Gend i slutpekaren för indatabufferten.

void setg(char_type* _Gbeg,
    char_type* _Gnext,
    char_type* _Gend);

Parameterar

_Gbeg
En pekare till början av bufferten.

_Gnext
En pekare till någonstans mitt i bufferten.

_Gend
En pekare till slutet av bufferten.

basic_streambuf::setp

En skyddad funktion som lagrar _Pbeg i startpekaren och _Pend i slutpekaren för utdatabufferten.

void setp(char_type* _Pbeg, char_type* _Pend);

Parameterar

_Pbeg
En pekare till början av bufferten.

_Pend
En pekare till slutet av bufferten.

basic_streambuf::sgetc

Returnerar aktuellt element utan att ändra position i strömmen.

int_type sgetc();

Returvärde

Det aktuella elementet.

Anmärkningar

Om en läsposition är tillgänglig returnerar medlemsfunktionen traits_type::to_int_type(*gptr). Annars returneras underflöde.

Exempel

// basic_streambuf_sgetc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;
   ifstream myfile( "basic_streambuf_sgetc.txt", ios::in );

   char i = myfile.rdbuf( )->sgetc( );
   cout << i << endl;
   i = myfile.rdbuf( )->sgetc( );
   cout << i << endl;
}

basic_streambuf::sgetn

Extraherar upp till antal tecken från indatabufferten och lagrar dem i den angivna bufferten ptr.

Den här metoden är potentiellt osäker eftersom den förlitar sig på anroparen för att kontrollera att de anförda värdena är korrekta.

streamsize sgetn(
    char_type* ptr,
    streamsize count);

Parameterar

ptr
Bufferten som ska innehålla de extraherade tecknen.

antal
Antalet element som ska läsas.

Returvärde

Antalet lästa element. Mer information finns i streamsize för mer information.

Anmärkningar

Medlemsfunktionen returnerar xsgetn(ptr, count).

Exempel

// basic_streambuf_sgetn.cpp
// compile with: /EHsc /W3
#include <iostream>
#include <fstream>

int main()
{
    using namespace std;

    ifstream myfile("basic_streambuf_sgetn.txt", ios::in);
    char a[10];

    // Extract 3 characters from myfile and store them in a.
    streamsize i = myfile.rdbuf()->sgetn(&a[0], 3);  // C4996
    a[i] = myfile.widen('\0');

    // Display the size and contents of the buffer passed to sgetn.
    cout << i << " " << a << endl;

    // Display the contents of the original input buffer.
    cout << myfile.rdbuf() << endl;
}

basic_streambuf::showmanyc

En skyddad virtuell medlemsfunktion som returnerar antalet tecken som kan extraheras från indataströmmen och se till att programmet inte får vänta på obestämd tid.

virtual streamsize showmanyc();

Returvärde

Standardbeteendet är att returnera noll.

basic_streambuf::snextc

Läser det aktuella elementet och returnerar följande element.

int_type snextc();

Returvärde

Nästa element i strömmen.

Anmärkningar

Medlemsfunktionen anropar sbumpc och returnerar traits_type::eof om funktionen returnerar traits_type::eof. Annars returneras sgetc.

Exempel

// basic_streambuf_snextc.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
   using namespace std;
   int i = 0;
   i = cin.rdbuf( )->snextc( );
   // cout << ( int )char_traits<char>::eof << endl;
   cout << i << endl;
}
aa
aa97

basic_streambuf::sputbackc

Placerar en char_type i strömmen.

int_type sputbackc(char_type _Ch);

Parameterar

_Ch
Tecknet.

Returvärde

Returnerar tecknet eller felet.

Anmärkningar

Om en putback-position är tillgänglig och _Ch jämförs med tecknet som lagras i den positionen, minskar medlemsfunktionen nästa pekare för indatabufferten och returnerar traits_type::to_int_type(_Ch). Annars returneras pbackfail(_Ch).

Exempel

// basic_streambuf_sputbackc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
    using namespace std;

    ifstream myfile("basic_streambuf_sputbackc.txt",
        ios::in);

    int i = myfile.rdbuf()->sbumpc();
    cout << (char)i << endl;
    int j = myfile.rdbuf()->sputbackc('z');
    if (j == 'z')
    {
        cout << "it worked" << endl;
    }
    i = myfile.rdbuf()->sgetc();
    cout << (char)i << endl;
}

basic_streambuf::sputc

Placerar ett tecken i strömmen.

int_type sputc(char_type _Ch);

Parameterar

_Ch
Tecknet.

Returvärde

Returnerar tecknet om det lyckas.

Anmärkningar

Om en write position är tillgänglig lagrar medlemsfunktionen _Ch i skrivpositionen, ökar nästa pekare för utdatabufferten och returnerar traits_type::to_int_type(_Ch). Annars returneras spill(_Ch).

Exempel

// basic_streambuf_sputc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;

   int i = cout.rdbuf( )->sputc( 'a' );
   cout << endl << ( char )i << endl;
}
a
a

basic_streambuf::sputn

Placerar en teckensträng i strömmen.

streamsize sputn(const char_type* ptr, streamsize count);

Parameterar

ptr
Teckensträngen.

antal
Antalet tecken.

Returvärde

Antalet tecken som infogats i strömmen.

Anmärkningar

Medlemsfunktionen returnerar xsputn(ptr, count). Mer information finns i avsnittet Kommentarer i den här medlemmen för mer information.

Exempel

// basic_streambuf_sputn.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main()
{
    using namespace std;

    streamsize i = cout.rdbuf()->sputn("test", 4);
    cout << endl << i << endl;
}
test
4

basic_streambuf::stossc

Gå förbi det aktuella elementet i strömmen.

void stossc();

Anmärkningar

Medlemsfunktionen anropar sbumpc. En implementering krävs inte för att tillhandahålla den här medlemsfunktionen.

Exempel

// basic_streambuf_stossc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;
   ifstream myfile( "basic_streambuf_stossc.txt", ios::in );

   myfile.rdbuf( )->stossc( );
   char i = myfile.rdbuf( )->sgetc( );
   cout << i << endl;
}

basic_streambuf::sungetc

Hämtar ett tecken från strömmen.

int_type sungetc();

Returvärde

Returnerar antingen tecknet eller felet.

Anmärkningar

Om en putback-position är tillgänglig minskar medlemsfunktionen nästa pekare för indatabufferten och returnerar traits_type::to_int_type(*gptr). Det går dock inte alltid att fastställa det sista tecknet som lästes så att det kan avbildas i tillståndet för den aktuella bufferten. Om detta är sant returnerar funktionen pbackfail. Undvik den här situationen genom att hålla reda på tecknet som ska läggas tillbaka och anropa sputbackc(ch), vilket inte misslyckas förutsatt att du inte anropar det i början av strömmen och du inte försöker lägga tillbaka mer än ett tecken.

Exempel

// basic_streambuf_sungetc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;

   ifstream myfile( "basic_streambuf_sungetc.txt", ios::in );

   // Read and increment
   int i = myfile.rdbuf( )->sbumpc( );
   cout << ( char )i << endl;

   // Read and increment
   i = myfile.rdbuf( )->sbumpc( );
   cout << ( char )i << endl;

   // Decrement, read, and do not increment
   i = myfile.rdbuf( )->sungetc( );
   cout << ( char )i << endl;

   i = myfile.rdbuf( )->sungetc( );
   cout << ( char )i << endl;

   i = myfile.rdbuf( )->sbumpc( );
   cout << ( char )i << endl;
}

basic_streambuf::swap

Byter värden i det här objektet mot värdena i det angivna basic_streambuf objektet.

void swap(basic_streambuf& right);

Parameterar

rätt
En lvalue-referens till objektet basic_streambuf som används för att utbyta värden.

Anmärkningar

Funktionen protected member utbyter med rätt alla pekare som input buffer styr och output buffer. Det utbyter right. även getloc() med objektetlocale.

basic_streambuf::sync

En skyddad virtuell funktion som försöker synkronisera de kontrollerade strömmarna med eventuella associerade externa strömmar.

virtual int sync();

Returvärde

Om funktionen inte kan lyckas returneras -1. Standardbeteendet är att returnera noll.

Anmärkningar

sync innebär att skriva ut alla element mellan början och nästa pekare för utdatabufferten. Det innebär inte att lägga tillbaka några element mellan nästa och slutpekare för indatabufferten.

basic_streambuf::traits_type

Associerar ett typnamn med Tr-mallparametern.

typedef Tr traits_type;

basic_streambuf::uflow

En skyddad virtuell funktion som extraherar det aktuella elementet från indataströmmen.

virtual int_type uflow();

Returvärde

Det aktuella elementet.

Anmärkningar

Den skyddade virtuella medlemsfunktionen försöker extrahera det aktuella elementet ch från indataströmmen, sedan avancera den aktuella strömpositionen och returnera elementet som traits_type::to_int_type( ch). Det kan göra det på olika sätt:

  • Om en läsposition är tillgänglig tar den ch som elementet som lagras i läspositionen och flyttar fram nästa pekare för indatabufferten.

  • Det kan läsa ett element direkt, från någon extern källa, och leverera det som värdet ch.

  • För en strömbuffert med vanliga indata- och utdataströmmar kan den göra en läsposition tillgänglig genom att skriva ut, till något externt mål, vissa eller alla element mellan början och nästa pekare för utdatabufferten. Eller så kan den allokera ny eller ytterligare lagring för indatabufferten. Funktionen läser sedan in ett eller flera element från en extern källa.

Om funktionen inte kan lyckas returnerar den traits_type::eof eller utlöser ett undantag. Annars returneras det aktuella elementet ch i indataströmmen, konverterat enligt beskrivningen ovan, och flyttar fram nästa pekare för indatabufferten. Standardbeteendet är att anropa underflöde och, om funktionen returnerar traits_type::eof, för att returnera traits_type::eof. Annars returnerar funktionen det aktuella elementet ch i indataströmmen, konverterat enligt tidigare beskrivning, och flyttar fram nästa pekare för indatabufferten.

basic_streambuf::underflöde

Skyddad virtuell funktion för att extrahera det aktuella elementet från indataströmmen.

virtual int_type underflow();

Returvärde

Det aktuella elementet.

Anmärkningar

Den skyddade virtuella medlemsfunktionen strävar efter att extrahera det aktuella elementet ch från indataströmmen, utan att flytta fram den aktuella strömpositionen och returnera den som traits_type::to_int_type( ch). Det kan göra det på olika sätt:

  • Om en läsposition är tillgänglig är ch elementet som lagras i läspositionen. Mer information finns i avsnittet Anmärkningar i klassen basic_streambuf.

  • Det kan göra en läsposition tillgänglig genom att allokera ny eller ytterligare lagring för indatabufferten och sedan läsa in, från någon extern källa, ett eller flera element. Mer information finns i avsnittet Anmärkningar i klassen basic_streambuf.

Om funktionen inte kan lyckas returnerar traits_type:: den eof() eller utlöser ett undantag. Annars returneras det aktuella elementet i indataströmmen, konverterat enligt tidigare beskrivning. Standardbeteendet är att returnera traits_type::eof().

Den virtuella underflow funktionen, med funktionerna sync och overflow , definierar egenskaperna för streambuf-derived-klassen. Varje härledd klass kan implementeras underflow på olika sätt, men gränssnittet med den anropande strömklassen är detsamma.

Funktionen underflow anropas oftast av offentliga streambuf funktioner som sgetc och sgetn när get-området är tomt, men andra klasser, inklusive strömklasserna, kan anropa underflow när som helst.

Funktionen underflow förser get-området med tecken från indatakällan. Om get-området innehåller tecken underflow returnerar det första tecknet. Om get-området är tomt fyller det hämta-området och returnerar nästa tecken (som det lämnar i get-området). Om det inte finns några fler tecken tillgängliga underflow returnerar EOF och lämnar området tomt.

strstreambuf I klassen underflow justerar egptr-pekaren för att få åtkomst till lagring som dynamiskt allokerades av ett anrop till overflow.

basic_streambuf::xsgetn

Skyddad virtuell funktion för att extrahera element från indataströmmen.

Den här metoden är potentiellt osäker eftersom den förlitar sig på anroparen för att kontrollera att de anförda värdena är korrekta.

virtual streamsize xsgetn(
    char_type* ptr,
    streamsize count);

Parameterar

ptr
Bufferten som ska innehålla de extraherade tecknen.

antal
Antalet element som ska extraheras.

Returvärde

Antalet element som extraherats.

Anmärkningar

Funktionen för skyddad virtuell medlem extraherar upp till antal element från indataströmmen, som vid upprepade anrop till sbumpc, och lagrar dem i matrisen som börjar på ptr. Det returnerar antalet element som extraherats.

basic_streambuf::xsputn

Skyddad virtuell funktion för att infoga element i utdataströmmen.

virtual streamsize xsputn(const char_type* ptr, streamsize count);

Parameterar

ptr
Pekare till element som ska infogas.

antal
Antal element som ska infogas.

Returvärde

Antalet element som infogats i strömmen.

Anmärkningar

Den skyddade virtuella medlemsfunktionen infogar upp till antal element i utdataströmmen, som vid upprepade anrop till sputc, från matrisen som börjar vid ptr. Infogningen av tecken i utdataströmmen stoppas när alla antal tecken har skrivits, eller om anropet sputc( count) skulle returnera traits::eof(). Det returnerar antalet infogade element.

Se även

Trådsäkerhet i C++ Standard Library
iostream-programmering
iostreams-konventioner