Co to jest istream_view i kiedy z niego korzystam?

Dec 12 2020

Widocznie, C ++ 20 ma nowy std::istreamkondensatorem konstrukt: std::istream_view. Strona cppreference jest teraz skrótem . Czym więc jest „widok istream” i do czego mogę go używać?


† - Ok, technicznie przekierowuje do strony, na temat std::basic_istream_viewi że jeden „s zalążek.

Odpowiedzi

3 einpoklum Dec 12 2020 at 05:32

A std::istream_view<T>to zakres ; a dokładniej zakres utworzony jako widok . Ten dodatek do biblioteki standardowej jest podobny do tego, co możesz znaleźć poniżej std::ranges::views- z tym wyjątkiem, że nie jest to widok dowolnego zakresu, ale pliku std::istream.

Więc jakie „przeglądanie” jest stosowane do std::istream? Przypomnijmy, że istreamjest to strumień znaków , a nie dowolnych Telementów wybranego typu. Leniwe zastosowanie przetwarzania tych znaków na kolejne znaki Tto „oglądanie” strumienia. Oznacza to, że element k'th o std::istream_view<T>(is)to, co można uzyskać czas k'th uruchomiony is >> tdla ttypu T.

Używałbyś std::istream_view( ostrożnie ), gdy chcesz zastosować swój kod, który działa z zakresami, bezpośrednio do danych wejściowych - zamiast najpierw analizować dane wejściowe w jakiejś strukturze danych w bardziej „oldskulowy” sposób, a następnie pracować nad tą strukturą jako zakres.

Inne nabiera tego, czym std::istream_viewjest:

  • @Barry opisał jako odpowiednik programu, który analizuje dane Tze strumienia; przeczytaj tę odpowiedź, aby poznać szczegóły (zwróć uwagę, że chodzi o widok strumienia w range-v3, z którego większość stała się standardową biblioteką zakresów).
  • @NicolBolas uważa, że ​​jest to rezultat „pakowania std::istream_iterator<T>w interfejs widoku C ++ 20”.