Apa itu istream_view dan kapan saya menggunakannya?

Dec 12 2020

Rupanya, C ++ 20 memiliki baru std::istreammembangun -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_viewdan yang itu adalah sebuah rintisan.

Jawaban

3 einpoklum Dec 12 2020 at 05:32

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 istreamadalah aliran karakter , bukan dari Telemen 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 >> tuntuk ttipe 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_viewitu:

  • @Barry telah dideskripsikan sebagai padanan dari coroutine yang mem-parsing Tdari 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".