Kelas basic_streambuf
Menjelaskan kelas dasar abstrak untuk mendapatkan buffer aliran, yang mengontrol transmisi elemen ke dan dari representasi tertentu dari aliran.
Sintaks
template <class Elem, class Tr = char_traits<Elem>>
class basic_streambuf;
Parameter
Elem
Sebuah char_type.
Tr
Karakter traits_type.
Keterangan
Templat kelas menjelaskan kelas dasar abstrak untuk mendapatkan buffer aliran, yang mengontrol transmisi elemen ke dan dari representasi tertentu dari aliran. Objek kelas basic_streambuf
membantu mengontrol aliran dengan elemen jenis Tr, juga dikenal sebagai char_type, yang sifat karakternya ditentukan oleh char_traits kelas, juga dikenal sebagai traits_type.
Setiap buffer aliran secara konseptual mengontrol dua aliran independen: satu untuk ekstraksi (input) dan satu untuk penyisipan (output). Representasi tertentu dapat, bagaimanapun, membuat salah satu atau kedua aliran ini tidak dapat diakses. Biasanya mempertahankan beberapa hubungan antara dua aliran. Apa yang Anda sisipkan ke dalam aliran output basic_stringbufElem
<, Tr
> objek, misalnya, adalah apa yang kemudian Anda ekstrak dari aliran inputnya. Saat Anda memposisikan satu aliran basic_filebufElem
<, Tr
> objek, Anda memposisikan aliran lainnya secara bersamaan.
Antarmuka publik ke templat basic_streambuf
kelas menyediakan operasi yang umum untuk semua buffer streaming, namun khusus. Antarmuka yang dilindungi memasok operasi yang diperlukan untuk representasi aliran tertentu untuk melakukan pekerjaannya. Fungsi anggota virtual yang dilindungi memungkinkan Anda menyesuaikan perilaku buffer aliran turunan untuk representasi aliran tertentu. Setiap buffer aliran turunan dalam pustaka ini menjelaskan caranya mengkhususkan perilaku fungsi anggota virtual yang dilindungi. Perilaku default untuk kelas dasar, yang sering tidak melakukan apa-apa, dijelaskan dalam artikel ini.
Fungsi anggota yang dilindungi yang tersisa mengontrol penyalinan ke dan dari penyimpanan apa pun yang disediakan ke transmisi buffer ke dan dari aliran. Buffer input, misalnya, ditandai dengan:
eback, pointer ke awal buffer.
gptr, pointer ke elemen berikutnya untuk dibaca.
egptr, pointer melewati akhir buffer.
Demikian pula, buffer output ditandai dengan:
pbase, penunjuk ke awal buffer.
pptr, pointer ke elemen berikutnya untuk menulis.
epptr, pointer melewati akhir buffer.
Untuk buffer apa pun, protokol berikut digunakan:
Jika pointer berikutnya null, tidak ada buffer. Jika tidak, ketiga pointer menunjuk ke urutan yang sama. Mereka dapat dibandingkan dengan aman untuk pesanan.
Untuk buffer output, jika pointer berikutnya membandingkan kurang dari pointer akhir, Anda dapat menyimpan elemen pada posisi tulis yang ditunjuk oleh pointer berikutnya.
Untuk buffer input, jika pointer berikutnya membandingkan kurang dari pointer akhir, Anda dapat membaca elemen pada posisi baca yang ditunjuk oleh pointer berikutnya.
Untuk buffer input, jika penunjuk awal membandingkan kurang dari penunjuk berikutnya, Anda dapat meletakkan kembali elemen pada posisi putback yang ditunjuk oleh pointer berikutnya yang dikurangi.
Setiap fungsi anggota virtual yang dilindungi yang Anda tulis untuk kelas yang berasal dari basic_streambuf
<Elem
, Tr
> harus bekerja sama dalam mempertahankan protokol ini.
Objek kelas basic_streambuf
<Elem
, Tr
> menyimpan enam pointer yang dijelaskan sebelumnya. Ini juga menyimpan objek lokal dalam objek jenis lokal untuk potensi penggunaan oleh buffer aliran turunan.
Konstruktor
Konstruktor | Deskripsi |
---|---|
basic_streambuf | Membuat objek jenis basic_streambuf . |
Typedefs
Nama jenis | Deskripsi |
---|---|
char_type | Mengaitkan nama jenis dengan Elem parameter templat. |
int_type | Mengaitkan nama jenis dalam basic_streambuf cakupan dengan Elem parameter templat. |
off_type | Mengaitkan nama jenis dalam basic_streambuf cakupan dengan Elem parameter templat. |
pos_type | Mengaitkan nama jenis dalam basic_streambuf cakupan dengan Elem parameter templat. |
traits_type | Mengaitkan nama jenis dengan Tr parameter templat. |
Fungsi anggota
Fungsi anggota | Deskripsi |
---|---|
eback | Fungsi terproteksi yang mengembalikan penunjuk ke awal buffer input. |
egptr | Fungsi terproteksi yang mengembalikan penunjuk melewati akhir buffer input. |
epptr | Fungsi terproteksi yang mengembalikan pointer melewati akhir buffer output. |
gbump | Fungsi terproteksi yang ditambahkan count ke penunjuk berikutnya untuk buffer input. |
getloc | basic_streambuf Mendapatkan lokal objek. |
gptr | Fungsi terproteksi yang mengembalikan penunjuk ke elemen buffer input berikutnya. |
imbue | Fungsi virtual yang dilindungi yang dipanggil oleh pubimbue. |
in_avail | Mengembalikan jumlah elemen yang siap dibaca dari buffer. |
Overflow | Fungsi virtual terproteksi yang dapat dipanggil ketika karakter baru dimasukkan ke dalam buffer penuh. |
pbackfail | Fungsi anggota virtual yang dilindungi yang mencoba menempatkan kembali elemen ke dalam aliran input, lalu menjadikannya elemen saat ini (ditujukkan ke penunjuk berikutnya). |
pbase | Fungsi terproteksi yang mengembalikan penunjuk ke awal buffer output. |
pbump | Fungsi terproteksi yang ditambahkan count ke penunjuk berikutnya untuk buffer output. |
pptr | Fungsi terproteksi yang mengembalikan penunjuk ke elemen buffer output berikutnya. |
pubimbue | basic_streambuf Mengatur lokal objek. |
pubseekoff | Memanggil seekoff, fungsi virtual terlindungi yang ditimpa di kelas turunan. |
pubseekpos | Memanggil seekpos, fungsi virtual yang dilindungi yang ditimpa di kelas turunan dan mengatur ulang posisi penunjuk saat ini. |
pubsetbuf | Memanggil setbuf, fungsi virtual yang dilindungi yang ditimpa di kelas turunan. |
pubsync | Sinkronisasi panggilan, fungsi virtual yang dilindungi yang ditimpa di kelas turunan dan memperbarui aliran eksternal yang terkait dengan buffer ini. |
sbumpc | Membaca dan mengembalikan elemen saat ini, memindahkan penunjuk aliran. |
seekoff | Fungsi anggota virtual yang dilindungi mencoba mengubah posisi saat ini untuk aliran yang dikontrol. |
seekpos | Fungsi anggota virtual yang dilindungi mencoba mengubah posisi saat ini untuk aliran yang dikontrol. |
setbuf | Fungsi anggota virtual yang dilindungi melakukan operasi khusus untuk setiap buffer aliran turunan. |
setg | Fungsi terproteksi yang disimpan _Gbeg di penunjuk awal, _Gnext di penunjuk berikutnya, dan _Gend di penunjuk akhir untuk buffer input. |
setp | Fungsi terproteksi yang disimpan _Pbeg di penunjuk awal dan _Pend di penunjuk akhir untuk buffer output. |
sgetc | Mengembalikan elemen saat ini tanpa mengubah posisi dalam aliran. |
sgetn | Mengembalikan jumlah elemen yang dibaca. |
showmanyc | Fungsi anggota virtual yang dilindungi yang mengembalikan hitungan jumlah karakter yang dapat diekstrak dari aliran input. Ini juga memastikan bahwa program tidak akan tunduk pada penantian yang tidak terbatas. |
snextc | Membaca elemen saat ini dan mengembalikan elemen berikut. |
sputbackc | char_type Menempatkan di aliran. |
sputc | Menempatkan karakter ke dalam aliran. |
sputn | Menempatkan string karakter ke dalam aliran. |
stossc | Pindah melewati elemen saat ini di aliran. |
sungetc | Mendapatkan karakter dari aliran. |
tukar | Menukar nilai dalam objek ini untuk nilai dalam parameter objek yang disediakan basic_streambuf . |
Sync | Fungsi virtual terproteksi yang mencoba menyinkronkan aliran terkontrol dengan aliran eksternal terkait. |
uflow | Fungsi virtual yang dilindungi yang mengekstrak elemen saat ini dari aliran input. |
aliran bawah | Fungsi virtual yang dilindungi yang mengekstrak elemen saat ini dari aliran input. |
xsgetn | Fungsi virtual terproteksi yang mengekstrak elemen dari aliran input. |
xsputn | Fungsi virtual terproteksi yang menyisipkan elemen ke dalam aliran output. |
Operator
Operator | Deskripsi |
---|---|
operator= | Menetapkan nilai objek ini dari objek lain basic_streambuf . |
Persyaratan
Header:<streambuf>
Namespace: std
basic_streambuf::basic_streambuf
Membuat objek jenis basic_streambuf
.
basic_streambuf();
basic_streambuf(const basic_streambuf& right);
Parameter
right
Referensi lvalue ke basic_streambuf
objek yang digunakan untuk mengatur nilai untuk objek ini basic_streambuf
.
Keterangan
Konstruktor pertama yang dilindungi menyimpan pointer null di semua pointer yang mengontrol buffer input dan buffer output. Ini juga disimpan locale::classic
di objek lokal. Untuk informasi selengkapnya, lihat lokal::klasik.
Konstruktor kedua yang dilindungi menyalin pointer dan lokal dari kanan.
basic_streambuf::char_type
Mengaitkan nama jenis dengan parameter templat Elem .
typedef Elem char_type;
basic_streambuf::eback
Fungsi terproteksi yang mengembalikan penunjuk ke awal buffer input.
char_type *eback() const;
Tampilkan Nilai
Penunjuk ke awal buffer input.
basic_streambuf::egptr
Fungsi terproteksi yang mengembalikan penunjuk melewati akhir buffer input.
char_type *egptr() const;
Tampilkan Nilai
Penunjuk melewati akhir buffer input.
basic_streambuf::epptr
Fungsi terproteksi yang mengembalikan pointer melewati akhir buffer output.
char_type *epptr() const;
Tampilkan Nilai
Pointer melewati akhir buffer output.
basic_streambuf::gbump
Fungsi terproteksi yang menambahkan hitungan ke penunjuk berikutnya untuk buffer input.
void gbump(int count);
Parameter
count
Jumlah untuk memajukan penunjuk.
basic_streambuf::getloc
Mendapatkan lokal objek basic_streambuf.
locale getloc() const;
Tampilkan Nilai
Objek lokal tersimpan.
Keterangan
Untuk informasi terkait, lihat ios_base::getloc.
Contoh
// 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
Fungsi terproteksi yang mengembalikan penunjuk ke elemen buffer input berikutnya.
char_type *gptr() const;
Tampilkan Nilai
Penunjuk ke elemen buffer input berikutnya.
basic_streambuf::imbue
Fungsi virtual terlindungi yang disebut oleh pubimbue.
virtual void imbue(const locale& _Loc);
Parameter
_Loc
Referensi ke lokal.
Keterangan
Perilaku defaultnya adalah tidak melakukan apa-apa.
basic_streambuf::in_avail
Mengembalikan jumlah elemen yang siap dibaca dari buffer.
streamsize in_avail();
Tampilkan Nilai
Jumlah elemen yang siap dibaca dari buffer.
Keterangan
Jika posisi baca tersedia, fungsi anggota mengembalikan egptr gptr - . Jika tidak, itu mengembalikan showmanyc.
Contoh
// 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
Mengaitkan nama jenis dalam cakupan basic_streambuf dengan salah satu jenis dalam parameter templat.
typedef typename traits_type::int_type int_type;
basic_streambuf::off_type
Mengaitkan nama jenis dalam cakupan basic_streambuf dengan salah satu jenis dalam parameter templat.
typedef typename traits_type::off_type off_type;
basic_streambuf::operator=
Menetapkan nilai objek ini dari objek lain basic_streambuf
.
basic_streambuf& operator=(const basic_streambuf& right);
Parameter
right
Referensi lvalue ke basic_streambuf
objek yang digunakan untuk menetapkan nilai ke objek ini.
Keterangan
Operator anggota yang dilindungi menyalin dari kanan pointer yang mengontrol buffer input dan buffer output. Ini juga menyimpan right.
getloc() di locale object
. Hal ini mengembalikan *this
.
basic_streambuf::overflow
Fungsi virtual terproteksi yang dapat dipanggil ketika karakter baru dimasukkan ke dalam buffer penuh.
virtual int_type overflow(int_type _Meta = traits_type::eof());
Parameter
_Meta
Karakter yang akan dimasukkan ke dalam buffer, atau traits_type::eof.
Tampilkan Nilai
Jika fungsi tidak berhasil, fungsi akan mengembalikan traits_type::eof atau melemparkan pengecualian. Jika tidak, mengembalikan traits_type::not_eof(_ Meta). Perilaku defaultnya adalah mengembalikan traits_type::eof.
Keterangan
Jika _Meta tidak dibandingkan dengan traits_type::eof, fungsi anggota virtual yang dilindungi berusaha memasukkan elemen traits_type::to_char_type(_Meta) ke dalam aliran output. Ini dapat melakukannya dengan berbagai cara:
write position
Jika tersedia, elemen dapat disimpan ke dalam posisi tulis dan menaikkan pointer berikutnya untuk buffer output.Ini dapat membuat posisi tulis tersedia dengan mengalokasikan penyimpanan baru atau tambahan untuk buffer output.
Ini dapat membuat posisi tulis tersedia dengan menulis, ke beberapa tujuan eksternal, beberapa atau semua elemen antara pointer awal dan berikutnya untuk buffer output.
Fungsi luapan virtual, bersama dengan fungsi sinkronisasi dan underflow , mendefinisikan karakteristik kelas turunan streambuf. Setiap kelas turunan mungkin mengimplementasikan luapan secara berbeda, tetapi antarmuka dengan kelas aliran panggilan sama.
Fungsi overflow
ini paling sering dipanggil oleh fungsi publik streambuf
seperti sputc
dan sputn
ketika area put penuh, tetapi kelas lain, termasuk kelas streaming, dapat memanggil overflow
kapan saja.
Fungsi ini mengonsumsi karakter di area put antara pbase
pointer dan pptr
lalu menginisialisasi ulang area put. Fungsi overflow
juga harus mengkonsumsi nCh
(jika nCh
tidak EOF
), atau mungkin memilih untuk menempatkan karakter tersebut di area put baru sehingga akan dikonsumsi pada panggilan berikutnya.
Definisi konsumsi bervariasi di antara kelas turunan. Misalnya, filebuf
kelas menulis karakternya ke file, sementara strstreambuf
kelas menyimpannya di buffer-nya dan (jika buffer ditetapkan sebagai dinamis) memperluas buffer sebagai respons terhadap panggilan ke luapan. Ekspansi ini dicapai dengan membebaskan buffer lama dan menggantinya dengan yang baru dan lebih besar. Pointer disesuaikan seperlunya.
basic_streambuf::p backfail
Fungsi anggota virtual yang dilindungi yang mencoba menempatkan kembali elemen ke dalam aliran input, lalu menjadikannya elemen saat ini (ditujukkan ke penunjuk berikutnya).
virtual int_type pbackfail(int_type _Meta = traits_type::eof());
Parameter
_Meta
Karakter yang akan dimasukkan ke dalam buffer, atau traits_type::eof.
Tampilkan Nilai
Jika fungsi tidak berhasil, fungsi akan mengembalikan traits_type::eof atau melemparkan pengecualian. Jika tidak, ia mengembalikan beberapa nilai lain. Perilaku defaultnya adalah mengembalikan traits_type::eof.
Keterangan
Jika _Meta dibandingkan dengan traits_type::eof, elemen untuk mendorong kembali secara efektif yang sudah ada di aliran sebelum elemen saat ini. Jika tidak, elemen tersebut digantikan oleh traits_type::to_char_type(_Meta). Fungsi ini dapat mengembalikan elemen dengan berbagai cara:
Jika posisi putback tersedia, itu dapat menyimpan elemen ke dalam posisi putback dan mengurangi pointer berikutnya untuk buffer input.
Ini dapat membuat posisi putback tersedia dengan mengalokasikan penyimpanan baru atau tambahan untuk buffer input.
Untuk buffer aliran dengan aliran input dan output umum, ia dapat membuat posisi putback tersedia dengan menulis, ke beberapa tujuan eksternal, beberapa atau semua elemen antara pointer awal dan berikutnya untuk buffer output.
basic_streambuf::p base
Fungsi terproteksi yang mengembalikan penunjuk ke awal buffer output.
char_type *pbase() const;
Tampilkan Nilai
Penunjuk ke awal buffer output.
basic_streambuf::p bump
Fungsi terproteksi yang menambahkan hitungan ke penunjuk berikutnya untuk buffer output.
void pbump(int count);
Parameter
count
Jumlah karakter untuk memindahkan posisi tulis ke depan.
basic_streambuf::p os_type
Mengaitkan nama jenis dalam cakupan basic_streambuf dengan salah satu jenis dalam parameter templat.
typedef typename traits_type::pos_type pos_type;
basic_streambuf::p ptr
Fungsi terproteksi yang mengembalikan penunjuk ke elemen buffer output berikutnya.
char_type *pptr() const;
Tampilkan Nilai
Penunjuk ke elemen berikutnya dari buffer output.
basic_streambuf::p ubimbue
Mengatur lokal objek basic_streambuf.
locale pubimbue(const locale& _Loc);
Parameter
_Loc
Referensi ke lokal.
Tampilkan Nilai
Nilai sebelumnya disimpan di objek lokal.
Keterangan
Fungsi anggota menyimpan _ Loc di objek lokal dan memanggil imbue.
Contoh
Lihat basic_ios::imbue untuk contoh yang menggunakan pubimbue
.
basic_streambuf::p ubseekoff
Memanggil seekoff, fungsi virtual terlindungi yang ditimpa di kelas turunan.
pos_type pubseekoff(off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Which = ios_base::in | ios_base::out);
Parameter
_Off
Posisi yang dicari relatif terhadap _Way.
_Cara
Titik awal untuk operasi offset. Lihat seekdir untuk kemungkinan nilai.
_Yang
Menentukan mode untuk posisi penunjuk. Defaultnya adalah memungkinkan Anda mengubah posisi baca dan tulis.
Tampilkan Nilai
Mengembalikan posisi baru atau posisi aliran yang tidak valid (seekoff(_ Off, _Way
, _Which
)).
Keterangan
Memindahkan penunjuk relatif terhadap _Way.
basic_streambuf::p ubseekpos
Memanggil seekpos, fungsi virtual yang dilindungi yang ditimpa di kelas turunan, dan mengatur ulang posisi penunjuk saat ini.
pos_type pubseekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);
Parameter
_Sp
Posisi yang dicari.
_Yang
Menentukan mode untuk posisi penunjuk. Defaultnya adalah memungkinkan Anda mengubah posisi baca dan tulis.
Tampilkan Nilai
Posisi baru atau posisi aliran yang tidak valid. Untuk menentukan apakah posisi aliran tidak valid, bandingkan nilai yang dikembalikan dengan pos_type(off_type(-1))
.
Keterangan
Fungsi anggota mengembalikan seekpos(_ Sp, _Which
).
basic_streambuf::p ubsetbuf
Memanggil setbuf, fungsi virtual yang dilindungi yang ditimpa di kelas turunan.
basic_streambuf<Elem, Tr> *pubsetbuf(
char_type* _Buffer,
streamsize count);
Parameter
_Buffer
Penunjuk untuk char_type
instansiasi ini.
count
Ukuran buffer.
Tampilkan Nilai
Mengembalikan setbuf( _Buffer
, count
).
basic_streambuf::p ubsync
Sinkronisasi panggilan, fungsi virtual yang dilindungi yang ditimpa di kelas turunan, dan memperbarui aliran eksternal yang terkait dengan buffer ini.
int pubsync();
Tampilkan Nilai
Mengembalikan sinkronisasi atau -1 jika gagal.
basic_streambuf::sbumpc
Membaca dan mengembalikan elemen saat ini, memindahkan penunjuk aliran.
int_type sbumpc();
Tampilkan Nilai
Elemen saat ini.
Keterangan
Jika posisi baca tersedia, fungsi anggota mengembalikan traits_type::to_int_type(*gptr) dan meningkatkan pointer berikutnya untuk buffer input. Jika tidak, ia mengembalikan uflow.
Contoh
// 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
Fungsi anggota virtual yang dilindungi yang mencoba mengubah posisi saat ini untuk aliran yang dikontrol.
virtual pos_type seekoff(
off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Which = ios_base::in | ios_base::out);
Parameter
_Off
Posisi yang dicari relatif terhadap _Way.
_Cara
Titik awal untuk operasi offset. Lihat seekdir untuk kemungkinan nilai.
_Yang
Menentukan mode untuk posisi penunjuk. Defaultnya adalah memungkinkan Anda mengubah posisi baca dan tulis.
Tampilkan Nilai
Mengembalikan posisi baru atau posisi aliran yang tidak valid (seekoff
(_ Nonaktif, _Way
, _Which
)).
Keterangan
Posisi baru ditentukan sebagai berikut:
Jika
_Way
==ios_base::beg
, posisi baru adalah awal aliran plus _ Nonaktif.Jika
_Way
==ios_base::cur
, posisi baru adalah posisi aliran saat ini ditambah _ Nonaktif.Jika
_Way
==ios_base::end
, posisi baru adalah akhir dari streaming plus _ Nonaktif.
Biasanya, jika mana yang &ios_base::in nonzero, aliran input terpengaruh, dan jika yang &ios_base::out nonzero, aliran output terpengaruh. Namun, penggunaan aktual parameter ini bervariasi di antara buffer aliran turunan.
Jika fungsi berhasil mengubah posisi atau posisi aliran, fungsi mengembalikan posisi aliran yang dihasilkan atau salah satu posisi aliran yang dihasilkan. Jika tidak, ia mengembalikan posisi aliran yang tidak valid. Perilaku defaultnya adalah mengembalikan posisi aliran yang tidak valid.
basic_streambuf::seekpos
Fungsi anggota virtual yang dilindungi yang mencoba mengubah posisi saat ini untuk aliran yang dikontrol.
virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);
Parameter
_Sp
Posisi yang dicari.
_Yang
Menentukan mode untuk posisi penunjuk. Defaultnya adalah memungkinkan Anda mengubah posisi baca dan tulis.
Tampilkan Nilai
Posisi baru, atau posisi aliran yang tidak valid. Untuk menentukan apakah posisi aliran tidak valid, bandingkan nilai yang dikembalikan dengan pos_type(off_type(-1))
.
Keterangan
Posisi baru adalah _ Sp.
Biasanya, jika mana yang &ios_base::in nonzero, aliran input terpengaruh, dan jika yang &ios_base::out nonzero, aliran output terpengaruh. Namun, penggunaan aktual parameter ini bervariasi di antara buffer aliran turunan.
Jika fungsi berhasil mengubah posisi atau posisi aliran, fungsi mengembalikan posisi aliran yang dihasilkan atau salah satu posisi aliran yang dihasilkan. Jika tidak, ia mengembalikan posisi aliran yang tidak valid (-1). Perilaku defaultnya adalah mengembalikan posisi aliran yang tidak valid.
basic_streambuf::setbuf
Fungsi anggota virtual yang dilindungi yang melakukan operasi khusus untuk setiap buffer aliran turunan.
virtual basic_streambuf<Elem, Tr> *setbuf(
char_type* _Buffer,
streamsize count);
Parameter
_Buffer
Penunjuk ke buffer.
count
Ukuran buffer.
Tampilkan Nilai
Perilaku defaultnya adalah mengembalikan this
.
Keterangan
Lihat basic_filebuf. setbuf
menyediakan area memori untuk streambuf
digunakan objek. Bagaimana buffer digunakan dalam didefinisikan dalam kelas turunan.
basic_streambuf::setg
Fungsi terproteksi yang menyimpan _ Gbeg di penunjuk awal, _Gnext
di penunjuk berikutnya, dan _Gend
di penunjuk akhir untuk buffer input.
void setg(char_type* _Gbeg,
char_type* _Gnext,
char_type* _Gend);
Parameter
_Gbeg
Penunjuk ke awal buffer.
_Gnext
Penunjuk ke suatu tempat di tengah buffer.
_Gend
Penunjuk ke akhir buffer.
basic_streambuf::setp
Fungsi terproteksi yang menyimpan _Pbeg di penunjuk awal dan _Pend di penunjuk akhir untuk buffer output.
void setp(char_type* _Pbeg, char_type* _Pend);
Parameter
_Pbeg
Penunjuk ke awal buffer.
_Pend
Penunjuk ke akhir buffer.
basic_streambuf::sgetc
Mengembalikan elemen saat ini tanpa mengubah posisi dalam aliran.
int_type sgetc();
Tampilkan Nilai
Elemen saat ini.
Keterangan
Jika posisi baca tersedia, fungsi anggota mengembalikan traits_type::to_int_type( *
gptr). Jika tidak, itu mengembalikan underflow.
Contoh
// 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
Mengekstrak hingga menghitung karakter dari buffer input dan menyimpannya di buffer ptr yang disediakan.
Metode ini berpotensi tidak aman, karena bergantung pada pemanggil untuk memeriksa apakah nilai yang diteruskan sudah benar.
streamsize sgetn(
char_type* ptr,
streamsize count);
Parameter
Ptr
Buffer untuk berisi karakter yang diekstrak.
count
Jumlah elemen yang akan dibaca.
Tampilkan Nilai
Jumlah elemen yang dibaca. Untuk informasi selengkapnya, lihat melakukan streaming untuk informasi selengkapnya.
Keterangan
Fungsi anggota mengembalikan xsgetn( ptr
, count
).
Contoh
// 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
Fungsi anggota virtual yang dilindungi yang mengembalikan hitungan jumlah karakter yang dapat diekstrak dari aliran input dan memastikan bahwa program tidak akan tunduk pada waktu tunggu yang tidak terbatas.
virtual streamsize showmanyc();
Tampilkan Nilai
Perilaku defaultnya adalah mengembalikan nol.
basic_streambuf::snextc
Membaca elemen saat ini dan mengembalikan elemen berikut.
int_type snextc();
Tampilkan Nilai
Elemen berikutnya dalam aliran.
Keterangan
Fungsi anggota memanggil sbumpc dan, jika fungsi tersebut mengembalikan traits_type::eof, mengembalikan traits_type::eof. Jika tidak, ia mengembalikan sgetc.
Contoh
// 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
Menempatkan char_type di aliran.
int_type sputbackc(char_type _Ch);
Parameter
_Ch
Karakternya.
Tampilkan Nilai
Mengembalikan karakter atau kegagalan.
Keterangan
Jika posisi putback tersedia dan _Ch dibandingkan dengan karakter yang disimpan dalam posisi tersebut, fungsi anggota mengurangi penunjuk berikutnya untuk buffer input dan mengembalikan traits_type::to_int_type( _Ch
). Jika tidak, itu mengembalikan pbackfail( _Ch
).
Contoh
// 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
Menempatkan karakter ke dalam aliran.
int_type sputc(char_type _Ch);
Parameter
_Ch
Karakternya.
Tampilkan Nilai
Mengembalikan karakter, jika berhasil.
Keterangan
write position
Jika tersedia, fungsi anggota menyimpan _Ch dalam posisi tulis, menaikkan pointer berikutnya untuk buffer output, dan mengembalikan traits_type::to_int_type( _Ch
). Jika tidak, itu mengembalikan overflow( _Ch
).
Contoh
// 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
Menempatkan string karakter ke dalam aliran.
streamsize sputn(const char_type* ptr, streamsize count);
Parameter
Ptr
String karakter.
count
Jumlah karakter.
Tampilkan Nilai
Jumlah karakter yang disisipkan ke dalam aliran.
Keterangan
Fungsi anggota mengembalikan xsputn( ptr
, count
). Untuk informasi selengkapnya, lihat bagian Keterangan anggota ini untuk informasi selengkapnya.
Contoh
// 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
Pindah melewati elemen saat ini di aliran.
void stossc();
Keterangan
Fungsi anggota memanggil sbumpc. Implementasi tidak diperlukan untuk menyediakan fungsi anggota ini.
Contoh
// 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
Mendapatkan karakter dari aliran.
int_type sungetc();
Tampilkan Nilai
Mengembalikan karakter atau kegagalan.
Keterangan
Jika posisi putback tersedia, fungsi anggota mengurangi pointer berikutnya untuk buffer input dan mengembalikan traits_type::
to_int_type( *
gptr). Namun, tidak selalu mungkin untuk menentukan karakter terakhir yang dibaca sehingga dapat ditangkap dalam status buffer saat ini. Jika ini benar, maka fungsi mengembalikan pbackfail. Untuk menghindari situasi ini, lacak karakter untuk diletakkan kembali dan panggil sputbackc(ch)
, yang tidak akan gagal asalkan Anda tidak memanggilnya di awal aliran dan Anda tidak mencoba mengembalikan lebih dari satu karakter.
Contoh
// 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
Menukar nilai dalam objek ini untuk nilai dalam objek yang disediakan basic_streambuf
.
void swap(basic_streambuf& right);
Parameter
right
Referensi lvalue ke basic_streambuf
objek yang digunakan untuk bertukar nilai.
Keterangan
Fungsi anggota yang dilindungi bertukar dengan tepat semua penunjuk yang mengontrol input buffer
dan output buffer
. Ini juga bertukar right.
getloc() dengan locale
objek .
basic_streambuf::sync
Fungsi virtual terproteksi yang mencoba menyinkronkan aliran terkontrol dengan aliran eksternal terkait.
virtual int sync();
Tampilkan Nilai
Jika fungsi tidak berhasil, fungsi akan mengembalikan -1. Perilaku defaultnya adalah mengembalikan nol.
Keterangan
sync
melibatkan penulisan elemen apa pun antara penunjuk awal dan berikutnya untuk buffer output. Ini tidak melibatkan menempatkan kembali elemen apa pun antara pointer berikutnya dan akhir untuk buffer input.
basic_streambuf::traits_type
Mengaitkan nama jenis dengan parameter templat Tr .
typedef Tr traits_type;
basic_streambuf::uflow
Fungsi virtual yang dilindungi yang mengekstrak elemen saat ini dari aliran input.
virtual int_type uflow();
Tampilkan Nilai
Elemen saat ini.
Keterangan
Fungsi anggota virtual yang dilindungi mencoba mengekstrak ch elemen saat ini dari aliran input, lalu memajukan posisi aliran saat ini, dan mengembalikan elemen sebagai traits_type::to_int_type( ch). Ini dapat melakukannya dengan berbagai cara:
Jika posisi baca tersedia, dibutuhkan ch sebagai elemen yang disimpan dalam posisi baca dan memajukan pointer berikutnya untuk buffer input.
Ini dapat membaca elemen secara langsung, dari beberapa sumber eksternal, dan mengirimkannya sebagai nilai ch.
Untuk buffer aliran dengan aliran input dan output umum, ia dapat membuat posisi baca tersedia dengan menulis, ke beberapa tujuan eksternal, beberapa atau semua elemen antara pointer awal dan berikutnya untuk buffer output. Atau dapat mengalokasikan penyimpanan baru atau tambahan untuk buffer input. Fungsi kemudian membaca, dari beberapa sumber eksternal, satu atau beberapa elemen.
Jika fungsi tidak berhasil, fungsi akan mengembalikan traits_type::eof, atau melemparkan pengecualian. Jika tidak, elemen ini mengembalikan elemen ch
saat ini dalam aliran input, dikonversi seperti yang dijelaskan di atas, dan memajukan penunjuk berikutnya untuk buffer input. Perilaku defaultnya adalah memanggil underflow dan, jika fungsi tersebut mengembalikan traits_type::eof, untuk mengembalikan traits_type::eof. Jika tidak, fungsi mengembalikan ch elemen saat ini dalam aliran input, dikonversi seperti yang dijelaskan sebelumnya, dan memajukan penunjuk berikutnya untuk buffer input.
basic_streambuf::underflow
Fungsi virtual yang dilindungi untuk mengekstrak elemen saat ini dari aliran input.
virtual int_type underflow();
Tampilkan Nilai
Elemen saat ini.
Keterangan
Fungsi anggota virtual yang dilindungi berusaha mengekstrak elemen ch saat ini dari aliran input, tanpa memajukan posisi aliran saat ini, dan mengembalikannya sebagai traits_type::
to_int_type( ch). Ini dapat melakukannya dengan berbagai cara:
Jika posisi baca tersedia, ch adalah elemen yang disimpan dalam posisi baca. Untuk informasi selengkapnya, lihat bagian Keterangan dari Kelas basic_streambuf.
Ini dapat membuat posisi baca tersedia dengan mengalokasikan penyimpanan baru atau tambahan untuk buffer input, kemudian membaca di, dari beberapa sumber eksternal, satu atau beberapa elemen. Untuk informasi selengkapnya, lihat bagian Keterangan dari Kelas basic_streambuf.
Jika fungsi tidak berhasil, fungsi akan mengembalikan traits_type::
eof()
atau melemparkan pengecualian. Jika tidak, ia mengembalikan elemen saat ini dalam aliran input, dikonversi seperti yang dijelaskan sebelumnya. Perilaku defaultnya adalah mengembalikan traits_type::eof()
.
Fungsi virtual underflow
, dengan fungsi sinkronisasi dan luapan , mendefinisikan karakteristik streambuf
kelas -turunan. Setiap kelas turunan mungkin mengimplementasikan underflow
secara berbeda, tetapi antarmuka dengan kelas aliran panggilan sama.
Fungsi underflow
ini paling sering dipanggil oleh fungsi publik streambuf
seperti sgetc dan sgetn ketika area get kosong, tetapi kelas lain, termasuk kelas stream, dapat memanggil underflow
kapan saja.
Fungsi ini underflow
memasok area get dengan karakter dari sumber input. Jika area dapatkan berisi karakter, underflow
mengembalikan karakter pertama. Jika area get kosong, ia mengisi area get dan mengembalikan karakter berikutnya (yang dibiaarkan di area get). Jika tidak ada lagi karakter yang tersedia, maka underflow
mengembalikan EOF
dan membiarkan area get kosong.
strstreambuf
Di kelas , underflow
sesuaikan penunjuk mesir untuk mengakses penyimpanan yang dialokasikan secara dinamis oleh panggilan ke overflow
.
basic_streambuf::xsgetn
Fungsi virtual yang dilindungi untuk mengekstrak elemen dari aliran input.
Metode ini berpotensi tidak aman, karena bergantung pada pemanggil untuk memeriksa apakah nilai yang diteruskan sudah benar.
virtual streamsize xsgetn(
char_type* ptr,
streamsize count);
Parameter
Ptr
Buffer untuk berisi karakter yang diekstrak.
count
Jumlah elemen yang akan diekstrak.
Tampilkan Nilai
Jumlah elemen yang diekstrak.
Keterangan
Fungsi anggota virtual yang dilindungi mengekstrak hingga menghitung elemen dari aliran input, seolah-olah dengan panggilan berulang ke sbumpc, dan menyimpannya dalam array yang dimulai di ptr. Ini mengembalikan jumlah elemen yang diekstrak.
basic_streambuf::xsputn
Fungsi virtual yang dilindungi untuk menyisipkan elemen ke dalam aliran output.
virtual streamsize xsputn(const char_type* ptr, streamsize count);
Parameter
Ptr
Arahkan ke elemen untuk disisipkan.
count
Jumlah elemen yang akan disisipkan.
Tampilkan Nilai
Jumlah elemen yang dimasukkan ke dalam aliran.
Keterangan
Fungsi anggota virtual yang dilindungi menyisipkan hingga menghitung elemen ke dalam aliran output, seolah-olah dengan panggilan berulang ke sputc, dari array yang dimulai di ptr. Penyisipan karakter ke aliran output berhenti setelah semua karakter hitungan ditulis, atau jika panggilan sputc( count)
akan mengembalikan traits::eof()
. Ini mengembalikan jumlah elemen yang disisipkan.
Baca juga
Keamanan utas di Pustaka Standar C++
Pemrograman iostream
Konvensi iostreams
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk