Udostępnij za pośrednictwem


basic_istream_view class (Standardowa biblioteka C++)

Widok kolejnych elementów ze strumienia wejściowego.

Składnia

template<movable Val, class CharT, class Traits>
    requires default_initializable<Val> &&
    stream_extractable <Val, CharT, Traits>
class basic_istream_view : public view_interface<basic_istream_view<Val, CharT, Traits>>;

Parametry szablonu

CharT
Typ znaku strumienia.

Traits
Opcjonalny. Zawiera szczegółowe informacje na temat typu znaku strumienia dotyczącego porównywania znaków, określania długości ciągu złożonego z tego typu znaków itd. Przykładową cechą jest char_traits<wchar_t>. Jeśli nie zostanie określony, wartość domyślna to char_traits<CharT>.

Val
Typ elementów do wyodrębnienia. Na przykład double przy użyciu strumienia: "1.1 2.2 3.3"

stream_extractable odnosi się do wymagania (koncepcji), że typ Val można wyodrębnić ze strumienia operator>> przy użyciu funkcji . Jest to równoważne:

template<class Val, class CharT, class Traits>
concept stream_extractable =
  requires(std::basic_istream<CharT,Traits>& is, Val& t) {
    is >> t;
  };

Właściwości widoku

Opis poniższych wpisów można znaleźć w temacie View class characteristics (Wyświetlanie właściwości klas)

Characteristic opis
Adapter zakresu istream
Zakres bazowy Brak
Typ elementu To samo co Val
Wyświetl kategorię iteratora input_range
Wielkości Nie.
Jest constiterowalne Nie.
Wspólny zakres Nie.
Pożyczony zakres Nie.

Specjalizacje:istream_view i wistream_view

Szablony aliasów wygody są udostępniane dla char strumieni i wchar_t w następujący sposób:

1) template<class Val>
using istream_view = ranges::basic_istream_view<Val, char>;

2) template<class Val>
using wistream_view = ranges::basic_istream_view<Val, wchar_t>;

1) Odczytuje elementy ze strumienia wejściowego składającego się z char znaków.
2) Odczytuje elementy ze strumienia wejściowego składającego się z wchar_t znaków.

W przypadku 1) i 2) Val odnosi się do typu elementów do wyodrębnienia. Na przykład Val otrzymuje double strumień: "1.1 2.2 3.3"

Elementy członkowskie

Funkcje składowe Opis
KonstruktoryC++20 Skonstruuj element basic_istream_view.
beginC++20 Przeczytaj pierwszą wartość i pobierz iterator widoku.
endC++20 Zwraca std::default_sentinel

Żadne funkcje składowe nie są dziedziczone z view_interfaceelementu .

Wymagania

Nagłówek: <ranges> (od C++20)

Przestrzeń nazw: std::ranges

Opcja kompilatora: /std:c++20 lub nowsza jest wymagana.

Konstruktory

Skonstruuj wystąpienie klasy basic_istream_view.

constexpr explicit
basic_istream_view(std::basic_istream<CharT, Traits>& stream);

Parametry

stream
Strumień do odczytu.

Aby uzyskać informacje o typie parametru szablonu, zobacz Parametry szablonu.

Wartość zwracana

basic_istream_view Wystąpienie. Wewnętrzny wskaźnik strumienia basic_istream_view jest inicjowany do addressof(stream).

Uwagi

Najlepszym sposobem utworzenia elementu basic_istream_view jest użycie adaptera views::istream zakresu. Adaptery zakresów są zamierzonym sposobem tworzenia klas widoków. Typy widoków są widoczne w przypadku utworzenia własnego niestandardowego typu widoku.

Przykład: basic_istream_view, istream_viewi wistream_view

// requires /std:c++20, or later
#include <ranges>
#include <iostream>
#include <sstream>

int main()
{
    // range adaptor
    std::istringstream streamOfdoubles{ "1.1 2.2 3.3 4.4 5.5" };
    for (const auto& elem : std::views::istream<double>(streamOfdoubles))
    {
        std::cout << elem << ' '; // 1.1 2.2 3.3 4.4 5.5
    }
    std::cout << '\n';

    // range adaptor - create a wistream_view
    std::wistringstream streamOfInts{ L"1 2 3 4 5" };
    for (const auto& elem : std::views::istream<int>(streamOfInts))
    {
        std::cout << elem << ' '; // 1 2 3 4 5
    }
    std::cout << '\n';

    // istream_view alias
    std::istringstream cpu1{ "8 0 8 0" };
    // equivalent std::ranges::istream_view<int, char>
    for (const auto& elem : std::ranges::istream_view<int>{cpu1})
    {
        std::cout << elem; // 8080
    }
    std::cout << '\n';

    // wistream_view alias
    std::wistringstream cpu2{ L"6 5 0 2" };
    // equivalent std::ranges::istream_view<int, wchar_t>
    for (const auto& elem : std::ranges::wistream_view<int>{cpu2})
    {
        std::cout << elem; // 6502
    }
    std::cout << '\n';

    // specify all template arguments
    std::wistringstream misc(L"S T L");
    std::ranges::basic_istream_view<wchar_t, wchar_t, std::char_traits<wchar_t>> basic{misc};
    for (const auto& elem : basic)
    {
        std::wcout << elem << ' '; // S T L
    }
}
1.1 2.2 3.3 4.4 5.5
1 2 3 4 5
8080
6502
S T L

begin

Przeczytaj pierwszą wartość i pobierz iterator do widoku.

constexpr auto begin();

Parametry

Brak.

Wartość zwracana

Iterator wskazujący pierwszy element w elemecie basic_istream_view.

end

Pobierz element sentinel na końcu widoku.

constexpr std::default_sentinel_t end() const noexcept;

Parametry

Brak.

Wartość zwracana

default_sentinel_t

Zobacz też

<ranges>
Klasy widoków