Co to jest istream_view i kiedy z niego korzystam?
Widocznie, C ++ 20 ma nowy std::istream
kondensatorem 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_view
i że jeden „s zalążek.
Odpowiedzi
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 istream
jest to strumień znaków , a nie dowolnych T
elementów wybranego typu. Leniwe zastosowanie przetwarzania tych znaków na kolejne znaki T
to „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 >> t
dla t
typu 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_view
jest:
- @Barry opisał jako odpowiednik programu, który analizuje dane
T
ze 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”.