Udostępnij za pośrednictwem


empty_view class (Standardowa biblioteka C++)

Widok bez elementów. Ten widok jest przydatny do celów testowych, takich jak wywoływanie kodu, który musi być dostarczany z widokiem, ale nie musi uzyskiwać dostępu do danych bazowych.

Składnia

template<class T>
    requires std::is_object_v<T>
class empty_view : public ranges::view_interface<empty_view<T>>;

Parametry szablonu

T
Typ elementu. Mimo że nie ma żadnych elementów w obiekcie empty_view, wszystkie zakresy są jednorodne. Oznacza to, że mają elementy określonego typu. Mimo że element empty_view nie ma żadnych elementów, nadal ma typ, taki jak empty_view int, lub stringsitp.

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 views::empty
Zakres bazowy Brak
Typ elementu Jak określono podczas empty_view tworzenia
Wyświetl kategorię iteratora contiguous_range
Wielkości Tak. Zawsze zwraca wartość 0
Jest constiterowalne Tak
Wspólny zakres Tak
Pożyczony zakres Tak

Elementy członkowskie

Funkcje składowe Opis
KonstruktoryC++20 Skonstruuj element empty_view.
beginC++20 Zwraca wartość nullptr.
endC++20 Zwraca wartość nullptr.
sizeC++20 Zwraca wartość 0
Dziedziczone z view_interface Opis
backC++20 Powoduje niezdefiniowane zachowanie.
dataC++20 Zwraca wartość nullptr.
emptyC++20 Zwraca wartość true.
frontC++20 Powoduje niezdefiniowane zachowanie.
operator[]C++20 Powoduje niezdefiniowane zachowanie.
operator boolC++20 Zwraca wartość false.

Uwagi

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

Ponieważ w elemecie empty_viewnie może być żadnych elementów , niektóre optymalizacje kompilatora są możliwe. Na przykład kompilator zostanie wyeliminowany for (auto e : std::views::empty<int>) {...} , ponieważ wie, że nie ma nic do iterowania.

Innym zastosowaniem metody empty_view jest dzielenie split_view elementu z empty_view ogranicznikiem, co skutkuje zakresem zakresów pojedynczych elementów.

Wymagania

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

Przestrzeń nazw: std::ranges

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

Konstruktory

Utwórz wystąpienie klasy empty_view.

template<class T>
inline constexpr empty_view<T> empty{};

Parametry

T
Typ podstawowego elementu, którego nie ma.

Uwagi

Najlepszym sposobem utworzenia elementu empty_view jest użycie adaptera empty zakresu.

Przykład: empty_view

// requires /std:c++20 or higher
#include <ranges>
#include <iostream>

int main()
{
    auto anEmptyView = std::views::empty<int>;
    bool isNotEmpty = (bool)anEmptyView;
    std::cout << std::boolalpha << isNotEmpty << "\n"; // false
    std::cout << std::boolalpha << anEmptyView.empty(); // true
}
false
true

back

Powoduje niezdefiniowane zachowanie.

constexpr auto back()
    requires ranges::bidirectional_range<T> && ranges::common_range<T>;

constexpr auto back() const
    requires ranges::bidirectional_range<const T> && ranges::common_range<const T>;

Parametry

Brak.

Wartość zwracana

Brak.

Uwagi

Wywołanie tej funkcji w kompilacji debugowania wywołuje potwierdzenie, że funkcja została wywołana na pustym view_interfaceobiekcie .

begin

Zwraca wartość nullptr , ponieważ w widoku nie ma pierwszego elementu.

static constexpr T* begin() noexcept

Wartość zwracana

nullptr

data

Zwraca wartość nullptr , ponieważ w widoku nie ma pierwszego elementu w celu uzyskania wskaźnika.

static constexpr T* data() noexcept

Wartość zwracana

nullptr.

empty

Sprawdź, czy widok pochodny jest pusty.

static constexpr bool empty() noexcept

Parametry

Brak.

Wartość zwracana

Zwraca wartość true.

end

Zwraca wartość nullptr , ponieważ w widoku nie ma żadnych elementów.

static constexpr T* end() noexcept

Wartość zwracana

nullptr.

front

Powoduje niezdefiniowane zachowanie.

constexpr auto front()
    requires ranges::forward_range<T>;
constexpr auto front() const
    requires ranges::forward_range<const T>;

Parametry

Brak.

Wartość zwracana

Brak.

Uwagi

Wywołanie tej funkcji w kompilacji debugowania wywołuje potwierdzenie, że funkcja została wywołana na pustym view_interfaceobiekcie .

operator[]

Powoduje niezdefiniowane zachowanie.

template<ranges::random_access_range R = T>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);

template<ranges::random_access_range R = const T>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;

Parametry

pos
Pozycja względem iteratora początkowego elementu do zwrócenia.

Wartość zwracana

Brak.

Uwagi

Wywołanie tej funkcji w kompilacji debugowania wywołuje potwierdzenie, że indeks jest poza zakresem dla elementu view_interface.

operator bool

Sprawdź, czy widok pochodny nie jest pusty.

constexpr explicit operator bool()
requires requires { ranges::empty(T ()); };

constexpr explicit operator bool() const
requires requires { ranges::empty(T ()); };

Parametry

Brak.

Wartość zwracana

Zwraca wartość false.

Przykład: (bool)

// requires /std:c++20 or higher
#include <ranges>
#include <iostream>

int main()
{
    auto anEmptyView = std::views::empty<int>;

    if (anEmptyView) // check if anEmptyView isn't empty
    {
        std::cout << "Error: why does an empty_view have elements?\n";
    }
    else
    {
        std::cout << "Correct: an empty_view is not not empty\n";
    }
}
Correct: an empty_view is not not empty

size

Pobierz liczbę elementów w widoku, które zawsze będą mieć wartość 0.

static constexpr size_t size()

Parametry

Brak.

Wartość zwracana

0.

Zobacz też

<ranges>
empty adapter zakresu
single_view
klasy widoków