Apa itu istream_view dan kapan saya menggunakannya?
Rupanya, C ++ 20 memiliki baru std::istream
membangun -terkait: std::istream_view
. The halaman cppreference di atasnya adalah sebuah rintisan sekarang † . Jadi, apa itu "pandangan dari istream
" dan untuk apa saya menggunakannya?
† - Ok, secara teknis ini mengarahkan ke halaman tentang std::basic_istream_view
dan yang itu adalah sebuah rintisan.
Jawaban
An std::istream_view<T>
adalah rentang ; dan lebih khusus lagi, rentang yang dibentuk sebagai tampilan . Penambahan pustaka standar ini mirip dengan apa yang mungkin Anda temukan di bawah std::ranges::views
- kecuali bahwa ini bukan tampilan dari rentang arbitrer, tetapi dari sebuah std::istream
.
Jadi apa "melihat" diterapkan ke std::istream
? Ingat kembali istream
adalah aliran karakter , bukan dari T
elemen jenis pilihan Anda. Penerapan lambat untuk mem-parsing karakter tersebut menjadi berturut T
- turut adalah "melihat" dari streaming. Artinya, elemen ke-k dari std::istream_view<T>(is)
adalah apa yang Anda akan mendapatkan waktu ke-k is >> t
untuk t
tipe T
.
Anda akan menggunakan std::istream_view
( dengan hati-hati ) ketika Anda ingin menerapkan kode Anda, yang bekerja dengan rentang, langsung untuk memasukkan data - daripada mengurai masukan Anda ke dalam beberapa struktur data dengan cara yang lebih "kuno", kemudian mengerjakan struktur itu terlebih dahulu sebagai jarak.
Orang lain mengambil apa std::istream_view
itu:
- @Barry telah dideskripsikan sebagai padanan dari coroutine yang mem-parsing
T
dari istream; baca jawaban ini untuk detailnya (perhatikan ini tentang tampilan istream di rentang-v3, yang sebagian besar menjadi pustaka rentang standar). - @NicolBolas menganggapnya sebagai hasil dari "membungkus
std::istream_iterator<T>
dalam antarmuka tampilan C ++ 20".