Udostępnij za pośrednictwem


basic_filebuf — Klasa

Opisuje bufor strumienia, który kontroluje transmisję elementów typu Char_T, których cechy znaków są określane przez klasę Tr, do i z sekwencji elementów przechowywanych w pliku zewnętrznym.

Składnia

template <class Char_T, class Tr = char_traits<Char_T>>
class basic_filebuf : public basic_streambuf<Char_T, Tr>

Parametry

Char_T
Podstawowy element buforu plików.

Tr
Cechy podstawowego elementu buforu plików (zwykle char_traits<Char_T>).

Uwagi

Szablon klasy opisuje bufor strumienia, który kontroluje transmisję elementów typu Char_T, których cechy znaków są określane przez klasę Tr do i z sekwencji elementów przechowywanych w pliku zewnętrznym.

Uwaga

Obiekty typu basic_filebuf są tworzone z wewnętrznym buforem typu char* niezależnie od char_type określonego przez parametr typu Char_T. Oznacza to, że ciąg Unicode (zawierający wchar_t znaki) zostanie przekonwertowany na ciąg ANSI (zawierający char znaki), zanim zostanie zapisany w buforze wewnętrznym. Aby przechowywać ciągi Unicode w buforze, utwórz nowy bufor typu wchar_t i ustaw go przy użyciu basic_streambuf::pubsetbuf() metody . Aby zobaczyć przykład, który demonstruje to zachowanie, zobacz poniżej.

Obiekt klasy basic_filebuf<Char_T, Tr> przechowuje wskaźnik pliku, który wyznacza FILE obiekt, który kontroluje strumień skojarzony z otwartym plikiem. Przechowuje również wskaźniki do dwóch aspektów konwersji plików do użycia przez chronione funkcje składowe przepełnienie i podpełnienie. Aby uzyskać więcej informacji, zobacz basic_filebuf::open.

Przykład

W poniższym przykładzie pokazano, jak wymusić, aby obiekt typu basic_filebuf<wchar_t> przechowywał znaki Unicode w swoim buforze wewnętrznym przez wywołanie pubsetbuf() metody .

// unicode_basic_filebuf.cpp
// compile with: /EHsc

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <memory.h>
#include <string.h>

#define IBUFSIZE 16

using namespace std;

void hexdump(const string& filename);

int main()
{
    wchar_t* wszHello = L"Hello World";
    wchar_t wBuffer[128];

    basic_filebuf<wchar_t> wOutFile;

    // Open a file, wcHello.txt, then write to it, then dump the
    // file's contents in hex
    wOutFile.open("wcHello.txt",
        ios_base::out | ios_base::trunc | ios_base::binary);
    if(!wOutFile.is_open())
    {
        cout << "Error Opening wcHello.txt\n";
        return -1;
    }
    wOutFile.sputn(wszHello, (streamsize)wcslen(wszHello));
    wOutFile.close();
    cout << "Hex Dump of wcHello.txt - note that output is ANSI chars:\n";
    hexdump(string("wcHello.txt"));

    // Open a file, wwHello.txt, then set the internal buffer of
    // the basic_filebuf object to be of type wchar_t, then write
    // to the file and dump the file's contents in hex
    wOutFile.open("wwHello.txt",
        ios_base::out | ios_base::trunc | ios_base::binary);
    if(!wOutFile.is_open())
    {
        cout << "Error Opening wwHello.txt\n";
        return -1;
    }
    wOutFile.pubsetbuf(wBuffer, (streamsize)128);
    wOutFile.sputn(wszHello, (streamsize)wcslen(wszHello));
    wOutFile.close();
    cout << "\nHex Dump of wwHello.txt - note that output is wchar_t chars:\n";
    hexdump(string("wwHello.txt"));

    return 0;
}

// dump contents of filename to stdout in hex
void hexdump(const string& filename)
{
    fstream ifile(filename.c_str(),
        ios_base::in | ios_base::binary);
    char *ibuff = new char[IBUFSIZE];
    char *obuff = new char[(IBUFSIZE*2)+1];
    int i;

    if(!ifile.is_open())
    {
        cout << "Cannot Open " << filename.c_str()
             << " for reading\n";
        return;
    }
    if(!ibuff || !obuff)
    {
        cout << "Cannot Allocate buffers\n";
        ifile.close();
        return;
    }

    while(!ifile.eof())
    {
        memset(obuff,0,(IBUFSIZE*2)+1);
        memset(ibuff,0,IBUFSIZE);
        ifile.read(ibuff,IBUFSIZE);

        // corner case where file is exactly a multiple of
        // 16 bytes in length
        if(ibuff[0] == 0 && ifile.eof())
            break;

        for(i = 0; i < IBUFSIZE; i++)
        {
            if(ibuff[i] >= ' ')
                obuff[i] = ibuff[i];
            else
                obuff[i] = '.';

            cout << setfill('0') << setw(2) << hex
                 << (int)ibuff[i] << ' ';
        }
        cout << "  " << obuff << endl;
    }
    ifile.close();
}
Hex Dump of wcHello.txt - note that output is ANSI chars:
48 65 6c 6c 6f 20 57 6f 72 6c 64 00 00 00 00 00   Hello World.....

Hex Dump of wwHello.txt - note that output is wchar_t chars:
48 00 65 00 6c 00 6c 00 6f 00 20 00 57 00 6f 00   H.e.l.l.o. .W.o.
72 00 6c 00 64 00 00 00 00 00 00 00 00 00 00 00   r.l.d...........

Konstruktory

Konstruktor opis
basic_filebuf Tworzy obiekt typu basic_filebuf.

Typedefs

Nazwa typu opis
char_type Kojarzy nazwę typu z parametrem szablonu Char_T .
int_type Określa, że ten typ w basic_filebufzakresie jest odpowiednikiem typu tej samej nazwy w Tr zakresie.
off_type Określa, że ten typ w basic_filebufzakresie jest odpowiednikiem typu tej samej nazwy w Tr zakresie.
pos_type Określa, że ten typ w basic_filebufzakresie jest odpowiednikiem typu tej samej nazwy w Tr zakresie.
traits_type Kojarzy nazwę typu z parametrem szablonu Tr .

Funkcje składowe

Funkcja składowa opis
close Zamyka plik.
is_open Wskazuje, czy plik jest otwarty.
open Otwiera plik.
przepełnienie Chroniona funkcja wirtualna, którą można wywołać, gdy nowy znak zostanie wstawiony do pełnego buforu.
pbackfail Chroniona funkcja wirtualnego elementu członkowskiego próbuje przywrócić element do strumienia wejściowego, a następnie ustawić go jako bieżący element (wskazywany przez następny wskaźnik).
seekoff Chroniona funkcja wirtualnego elementu członkowskiego próbuje zmienić bieżące pozycje dla kontrolowanych strumieni.
seekpos Chroniona funkcja wirtualnego elementu członkowskiego próbuje zmienić bieżące pozycje dla kontrolowanych strumieni.
setbuf Chroniona funkcja wirtualnego elementu członkowskiego wykonuje operację określoną dla każdego buforu strumienia pochodnego.
Zamiana Wymienia zawartość tego basic_filebuf parametru dla zawartości podanego basic_filebuf parametru.
synchronizować Chroniona funkcja wirtualna próbuje zsynchronizować kontrolowane strumienie z dowolnymi skojarzonymi strumieniami zewnętrznymi.
przepływ uflow Chroniona funkcja wirtualna w celu wyodrębnienia bieżącego elementu ze strumienia wejściowego.
Niedomiar Chroniona funkcja wirtualna w celu wyodrębnienia bieżącego elementu ze strumienia wejściowego.

Wymagania

Nagłówek:<fstream>

Przestrzeń nazw: std

basic_filebuf::basic_filebuf

Tworzy obiekt typu basic_filebuf.

basic_filebuf();

basic_filebuf(basic_filebuf&& right);

Uwagi

Pierwszy konstruktor przechowuje wskaźnik o wartości null we wszystkich wskaźnikach kontrolujących bufor wejściowy i bufor wyjściowy. Przechowuje również wskaźnik o wartości null w wskaźniku pliku.

Drugi konstruktor inicjuje obiekt z zawartością rightelementu , traktowany jako odwołanie rvalue.

basic_filebuf::char_type

Kojarzy nazwę typu z parametrem szablonu Char_T .

typedef Char_T char_type;

basic_filebuf::close

Zamyka plik.

basic_filebuf<Char_T, Tr> *close();

Wartość zwracana

Funkcja składowa zwraca wskaźnik o wartości null, jeśli wskaźnik pliku jest wskaźnikiem o wartości null.

Uwagi

close wywołuje metodę fclose(fp). Jeśli ta funkcja zwraca wartość niezerową, funkcja zwraca wskaźnik o wartości null. W przeciwnym razie zwraca this wartość , aby wskazać, że plik został pomyślnie zamknięty.

W przypadku szerokiego strumienia, jeśli wystąpiły jakiekolwiek wstawienia od momentu otwarcia strumienia lub od ostatniego wywołania metody streampos, funkcja wywołuje metodę overflow. Wstawia również dowolną sekwencję wymaganą do przywrócenia stanu konwersji początkowej przy użyciu aspektu fac konwersji pliku do wywołania fac.unshift zgodnie z potrzebami. Każdy wygenerowany element byte typu char jest zapisywany do skojarzonego strumienia wyznaczonego przez wskaźnik fp pliku tak, jakby przez kolejne wywołania formularza fputc(byte, fp). Jeśli wywołanie metody fac.unshift lub zapisu zakończy się niepowodzeniem, funkcja nie powiedzie się.

Przykład

W poniższym przykładzie przyjęto założenie, że dwa pliki w bieżącym katalogu: basic_filebuf_close.txt (zawartość to "testowanie") i iotest.txt (zawartość to "ssss").

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

int main() {
   using namespace std;
   ifstream file;
   basic_ifstream <wchar_t> wfile;
   char c;
   // Open and close with a basic_filebuf
   file.rdbuf()->open( "basic_filebuf_close.txt", ios::in );
   file >> c;
   cout << c << endl;
   file.rdbuf( )->close( );

   // Open/close directly
   file.open( "iotest.txt" );
   file >> c;
   cout << c << endl;
   file.close( );

   // open a file with a wide character name
   wfile.open( L"iotest.txt" );

   // Open and close a nonexistent with a basic_filebuf
   file.rdbuf()->open( "ziotest.txt", ios::in );
   cout << file.fail() << endl;
   file.rdbuf( )->close( );

   // Open/close directly
   file.open( "ziotest.txt" );
   cout << file.fail() << endl;
   file.close( );
}
t
s
0
1

basic_filebuf::int_type

Określa ten typ w basic_filebuf zakresie odpowiadający typowi tej samej nazwy w Tr zakresie.

typedef typename traits_type::int_type int_type;

basic_filebuf::is_open

Wskazuje, czy plik jest otwarty.

bool is_open() const;

Wartość zwracana

true jeśli wskaźnik pliku nie ma wartości null.

Przykład

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

int main( )
{
   using namespace std;
   ifstream file;
   cout << boolalpha << file.rdbuf( )->is_open( ) << endl;

   file.open( "basic_filebuf_is_open.cpp" );
   cout << file.rdbuf( )->is_open( ) << endl;
}
false
true

basic_filebuf::off_type

Określa ten typ w basic_filebuf zakresie odpowiadający typowi tej samej nazwy w Tr zakresie.

typedef typename traits_type::off_type off_type;

basic_filebuf::open

Otwiera plik.

basic_filebuf<Char_T, Tr> *open(
    const char* filename,
    ios_base::openmode mode,
    int protection = (int)ios_base::_Openprot);

basic_filebuf<Char_T, Tr> *open(
    const char* filename,
    ios_base::openmode mode);

basic_filebuf<Char_T, Tr> *open(
    const wchar_t* filename,
    ios_base::openmode mode,
    int protection = (int)ios_base::_Openprot);

basic_filebuf<Char_T, Tr> *open(
    const wchar_t* filename,
    ios_base::openmode mode);

Parametry

filename
Nazwa pliku do otwarcia.

tryb
Jeden z wyliczeń w pliku ios_base::openmode.

ochrona
Domyślna ochrona otwierania pliku równoważna parametrowi shflag w _fsopen _wfsopen.

Wartość zwracana

Jeśli bufor jest już otwarty lub wskaźnik pliku jest wskaźnikiem o wartości null, funkcja zwraca wskaźnik o wartości null. W przeciwnym razie zwraca wartość this.

Uwagi

Ta funkcja używa elementu , FILE * aby wykonać kopię zapasową elementu basic_filebuf , tak jakby wywołaliśmy fopen/wfopen(filename, strmode)funkcję . strmodejest określany na podstawie mode & ~(binaryate |)elementu :

  • ios_base::in staje się (otwórz istniejący "r" plik do odczytu).
  • ios_base::out lub ios_base::out | ios_base::trunc staje się "w" (obcinaj istniejący plik lub utwórz do zapisu).
  • ios_base::out | app staje się (otwórz istniejący "a" plik do dołączania wszystkich zapisów).
  • ios_base::in | ios_base::out staje się (otwórz istniejący "r+" plik do odczytu i zapisu).
  • ios_base::in | ios_base::out | ios_base::trunc staje się (obcinaj istniejący "w+" plik lub utwórz do odczytu i zapisu).
  • ios_base::in | ios_base::out | ios_base::app staje się (otwórz istniejący "a+" plik do odczytu i dołączania wszystkich zapisów).

Jeśli mode & ios_base::binary jest nonzero, funkcja dołącza b do strmode otwierania strumienia binarnego zamiast strumienia tekstowego. Jeśli mode & ios_base::ate plik jest niezerowy i plik został pomyślnie otwarty, bieżąca lokalizacja w strumieniu jest umieszczona na końcu pliku. Jeśli to się nie powiedzie, plik zostanie zamknięty.

Jeśli powyższe operacje zostały ukończone pomyślnie, zostanie określony aspekt konwersji plików: use_facet<codecvt<Char_T, char, traits_type::state_type)> >(getloc, do użycia przez niedopełnienie i przepełnienie.

Jeśli nie można pomyślnie otworzyć pliku, nullptr zostanie zwrócony.

Przykład

Zobacz basic_filebuf::close przykład, który używa elementu open.

basic_filebuf::operator=

Przypisz zawartość tego obiektu buforu strumienia. Jest to przypisanie przenoszenia obejmujące rvalue, które nie pozostawia kopii.

basic_filebuf& operator=(basic_filebuf&& right);

Parametry

Prawy
Odwołanie rvalue do obiektu basic_filebuf .

Wartość zwracana

Zwraca wartość *this.

Uwagi

Operator elementu członkowskiego zastępuje zawartość obiektu przy użyciu zawartości rightelementu , traktowanej jako odwołanie rvalue. Aby uzyskać więcej informacji, zobacz Deklarator odwołań Rvalue: &&.

basic_filebuf::overflow

Wywoływana, gdy nowy znak jest wstawiany do pełnego buforu.

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

Parametry

_Meta
Znak do wstawienia do buforu lub traits_type::eof.

Wartość zwracana

Jeśli funkcja nie może zakończyć się powodzeniem, zwraca wartość traits_type::eof. W przeciwnym razie zwraca wartość traits_type::not_eof(_Meta).

Uwagi

Jeśli _Meta != traits_type::eoffunkcja chronionego wirtualnego elementu członkowskiego próbuje wstawić element(_Meta) ch = traits_type::to_char_typedo buforu wyjściowego. Może to zrobić na różne sposoby:

  • Jeśli pozycja zapisu jest dostępna, może przechowywać element w pozycji zapisu i zwiększać następny wskaźnik dla buforu wyjściowego.

  • Może ona udostępnić pozycję zapisu, przydzielając nowy lub dodatkowy magazyn dla buforu wyjściowego.

  • Może przekonwertować wszystkie oczekujące dane wyjściowe w buforze wyjściowym, a następnie ch, używając aspektu fac konwersji plików do wywołania fac.out zgodnie z potrzebami. Każdy wygenerowany element ch typu char jest zapisywany do skojarzonego strumienia wyznaczonego przez wskaźnik fp pliku tak, jakby przez kolejne wywołania formularza fputc(ch, fp). Jeśli jakakolwiek konwersja lub zapis nie powiedzie się, funkcja nie powiedzie się.

basic_filebuf::p backfail

Próbuje przywrócić element do strumienia wejściowego, a następnie ustawić go jako bieżący element (wskazywany przez następny wskaźnik).

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

Parametry

_Meta
Znak do wstawienia do buforu lub traits_type::eof.

Wartość zwracana

Jeśli funkcja nie może zakończyć się powodzeniem, zwraca wartość traits_type::eof. W przeciwnym razie zwraca wartość traits_type::not_eof(_Meta).

Uwagi

Chroniona funkcja wirtualnego elementu członkowskiego umieszcza element w buforze wejściowym, a następnie sprawia, że jest to bieżący element (wskazywany przez następny wskaźnik). Jeśli _Meta == traits_type::eofelement , który należy odepchnąć, jest skutecznie elementem, który znajduje się już w strumieniu przed bieżącym elementem. W przeciwnym razie ten element jest zastępowany przez ch = traits_type::to_char_type(_Meta)element . Funkcja może umieścić element na różne sposoby:

  • Jeśli pozycja jest dostępna, a przechowywany tam element porównuje wartość równą putback ch, może on odkreślić następny wskaźnik dla buforu wejściowego.

  • Jeśli funkcja może udostępnić putback pozycję, może to zrobić, ustawić następny wskaźnik, aby wskazać tę pozycję i zapisać ch w tej pozycji.

  • Jeśli funkcja może odepchnąć element do strumienia wejściowego, może to zrobić, na przykład wywołując ungetc element typu char.

basic_filebuf::p os_type

Określa ten typ w basic_filebuf zakresie odpowiadający typowi tej samej nazwy w Tr zakresie.

typedef typename traits_type::pos_type pos_type;

basic_filebuf::seekoff

Próbuje zmienić bieżące pozycje dla kontrolowanych strumieni.

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

Parametry

_Od
Stanowisko do poszukiwania względem _Way.

_Droga
Punkt początkowy operacji przesunięcia. Zobacz wyszukiwanie możliwych wartości.

_Który
Określa tryb położenia wskaźnika. Ustawieniem domyślnym jest umożliwienie modyfikowania pozycji odczytu i zapisu.

Wartość zwracana

Zwraca nową pozycję lub nieprawidłową pozycję strumienia.

Uwagi

Chroniona funkcja wirtualna elementu członkowskiego próbuje zmienić bieżące pozycje dla kontrolowanych strumieni. W przypadku obiektu klasy basic_filebuf<Char_T, Tr>pozycja strumienia może być reprezentowana przez obiekt typu fpos_t, który przechowuje przesunięcie i wszelkie informacje o stanie potrzebne do analizowania szerokiego strumienia. Przesunięcie zero odnosi się do pierwszego elementu strumienia. (Obiekt typu pos_type przechowuje co najmniej fpos_t obiekt).

W przypadku pliku otwartego zarówno do odczytu, jak i zapisu, zarówno strumieni wejściowych, jak i wyjściowych są rozmieszczone razem. Aby przełączać się między wstawianiem i wyodrębnianiem, należy wywołać metodę pubseekoff lub pubseekpos. Wywołania do pubseekoff (a tym samym seekoff) mają różne ograniczenia dotyczące strumieni tekstowych, strumieni binarnych i szerokich strumieni.

Jeśli wskaźnik fp pliku jest wskaźnikiem o wartości null, funkcja kończy się niepowodzeniem. W przeciwnym razie próbuje zmienić położenie strumienia, wywołując metodę fseek(fp, _Off, _Way). Jeśli ta funkcja powiedzie się, a wynikowa pozycja fposn może zostać określona przez wywołanie fgetpos(fp, &fposn)funkcji , funkcja zakończy się powodzeniem. Jeśli funkcja powiedzie się, zwraca wartość typu pos_type zawierającego fposnwartość . W przeciwnym razie zwraca nieprawidłową pozycję strumienia.

basic_filebuf::seekpos

Próbuje zmienić bieżące pozycje dla kontrolowanych strumieni.

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

Parametry

_Sp
Stanowisko do poszukiwania.

_Który
Określa tryb położenia wskaźnika. Ustawieniem domyślnym jest umożliwienie modyfikowania pozycji odczytu i zapisu.

Wartość zwracana

Jeśli wskaźnik fp pliku jest wskaźnikiem o wartości null, funkcja kończy się niepowodzeniem. W przeciwnym razie próbuje zmienić położenie strumienia przez wywołanie fsetpos(fp, &fposn)metody , gdzie fposn jest obiektem przechowywanym fpos_t w posobiekcie . Jeśli ta funkcja powiedzie się, funkcja zwróci poswartość . W przeciwnym razie zwraca nieprawidłową pozycję strumienia. Aby określić, czy pozycja strumienia jest nieprawidłowa, porównaj wartość zwracaną z pos_type(off_type(-1)).

Uwagi

Chroniona funkcja wirtualna elementu członkowskiego próbuje zmienić bieżące pozycje dla kontrolowanych strumieni. W przypadku obiektu klasy basic_filebuf<Char_T, Tr>pozycja strumienia może być reprezentowana przez obiekt typu fpos_t, który przechowuje przesunięcie i wszelkie informacje o stanie potrzebne do analizowania szerokiego strumienia. Przesunięcie zero odnosi się do pierwszego elementu strumienia. (Obiekt typu pos_type przechowuje co najmniej fpos_t obiekt).

W przypadku pliku otwartego zarówno do odczytu, jak i zapisu, zarówno strumieni wejściowych, jak i wyjściowych są rozmieszczone razem. Aby przełączać się między wstawianiem i wyodrębnianiem, należy wywołać metodę pubseekoff lub pubseekpos. Wywołania do pubseekoff (i ) seekoffmają różne ograniczenia dotyczące strumieni tekstowych, strumieni binarnych i szerokich strumieni.

W przypadku szerokiego strumienia, jeśli wystąpiły jakiekolwiek wstawienia od momentu otwarcia strumienia lub od ostatniego wywołania metody streampos, funkcja wywołuje metodę overflow. Wstawia również dowolną sekwencję wymaganą do przywrócenia stanu konwersji początkowej przy użyciu aspektu fac konwersji pliku do wywołania fac.unshift zgodnie z potrzebami. Każdy wygenerowany element byte typu char jest zapisywany do skojarzonego strumienia wyznaczonego przez wskaźnik fp pliku tak, jakby przez kolejne wywołania formularza fputc(byte, fp). Jeśli wywołanie metody fac.unshift lub zapisu zakończy się niepowodzeniem, funkcja nie powiedzie się.

basic_filebuf::setbuf

Wykonuje operację konkretną dla każdego buforu strumienia pochodnego.

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

Parametry

_Bufor
Wskaźnik do buforu.

count
Rozmiar buforu.

Wartość zwracana

Funkcja chronionego elementu członkowskiego zwraca zero, jeśli wskaźnik fp pliku jest wskaźnikiem o wartości null.

Uwagi

setbuf wywołania setvbuf( fp, (char*) _Buffer, _IOFBF, count * sizeof( Char_T)) w celu zaoferowania tablicy elementów rozpoczynających count się od _Buffer jako buforu dla strumienia. Jeśli ta funkcja zwraca wartość niezerową, funkcja zwraca wskaźnik o wartości null. W przeciwnym razie zwraca this sygnał powodzenia.

basic_filebuf::swap

Wymienia zawartość tego basic_filebuf elementu pod kątem zawartości podanego basic_filebufelementu .

void swap(basic_filebuf& right);

Parametry

Prawy
Odwołanie lvalue do innego basic_filebufelementu .

basic_filebuf::sync

Próbuje zsynchronizować kontrolowane strumienie z dowolnymi skojarzonymi strumieniami zewnętrznymi.

virtual int sync();

Wartość zwracana

Zwraca zero, jeśli wskaźnik fp pliku jest wskaźnikiem o wartości null. W przeciwnym razie zwraca zero tylko wtedy, gdy wywołania zarówno przepełnienia , jak i fflush(fp) pomyślne opróżnienia wszystkich oczekujących danych wyjściowych do strumienia.

basic_filebuf::traits_type

Kojarzy nazwę typu z parametrem szablonu Tr .

typedef Tr traits_type;

basic_filebuf::underflow

Wyodrębnia bieżący element ze strumienia wejściowego.

virtual int_type underflow();

Wartość zwracana

Jeśli funkcja nie może zakończyć się powodzeniem, zwraca wartość traits_type::eof. W przeciwnym razie zwraca chwartość , przekonwertowaną zgodnie z opisem w sekcji Uwagi.

Uwagi

Chroniona funkcja wirtualnego elementu członkowskiego próbuje wyodrębnić bieżący element ch ze strumienia wejściowego i zwrócić element jakoto_int_typetraits_type::(ch) . Może to zrobić na różne sposoby:

  • Jeśli pozycja odczytu jest dostępna, przyjmuje ch jako element przechowywany w pozycji odczytu i przechodzi następny wskaźnik dla buforu wejściowego.

  • Może odczytywać jeden lub więcej elementów typu char, tak jak przez kolejne wywołania formularza fgetc(fp)i przekonwertować je na element ch typu Char_T przy użyciu aspektu fac konwersji pliku do wywołania fac.in zgodnie z potrzebami. Jeśli jakikolwiek odczyt lub konwersja nie powiedzie się, funkcja nie powiedzie się.

Zobacz też

<fstream>
Bezpieczeństwo wątku w standardowej bibliotece C++
iostream, programowanie
Konwencje iostream