Sdílet prostřednictvím


empty_view class (standardní knihovna jazyka C++)

Zobrazení bez prvků Toto zobrazení je užitečné pro testovací účely, jako je volání kódu, který je potřeba poskytnout v zobrazení, ale nepotřebuje přístup k podkladovým datům.

Syntaxe

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

Parametry šablony

T
Typ elementu. I když nejsou žádné prvky v objektu empty_view, všechny rozsahy jsou homogenní. To znamená, že mají prvky určitého typu. Takže i když empty_view nemá žádné prvky, stále má typ, jako empty_view je například , intnebo strings, atd.

Zobrazení charakteristik

Popis následujících položek naleznete v tématu Zobrazení vlastností třídy.

Charakteristika Popis
Adaptér rozsahu views::empty
Podkladová oblast Nic
Typ elementu Jak je uvedeno při empty_view vytvoření
Zobrazit kategorii iterátoru contiguous_range
Tříděný Ano. Vždy vrátí hodnotu 0.
Je const-iterable Ano
Společný rozsah Ano
Zapůjčený rozsah Ano

Členové

Členské funkce Popis
KonstruktoryC++20 Vytvoření objektu empty_view.
beginC++20 Vrací objekt nullptr.
endC++20 Vrací objekt nullptr.
sizeC++20 Vrátí hodnotu 0.
Zděděno z view_interface Popis
backC++20 Výsledkem je nedefinované chování.
dataC++20 Vrací objekt nullptr.
emptyC++20 Vrací objekt true.
frontC++20 Výsledkem je nedefinované chování.
operator[]C++20 Výsledkem je nedefinované chování.
operator boolC++20 Vrací objekt false.

Poznámky

Nejlepší způsob, jak vytvořit, empty_view je použití adaptéru rozsahu empty . Adaptéry rozsahu představují zamýšlený způsob vytváření tříd zobrazení. Typy zobrazení jsou vystaveny pro případ, že chcete vytvořit vlastní typ zobrazení.

Vzhledem k tomu, že v žádném empty_viewpřípadě nemůže být žádné prvky , některé optimalizace kompilátoru jsou možné. Kompilátor například odstraní for (auto e : std::views::empty<int>) {...} , protože ví, že neexistuje nic k iteraci.

Dalším použitím je empty_view rozdělení split_view oddělovače s oddělovačem empty_view , což vede k rozsahu oblastí s jedním prvkem.

Požadavky

Hlavička: <ranges> (od C++20)

Obor názvů: std::ranges

Je vyžadována možnost kompilátoru: /std:c++20 nebo novější.

Konstruktory

Vytvořte instanci objektu empty_view.

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

Parametry

T
Typ základního prvku, z něhož neexistuje žádný.

Poznámky

Nejlepší způsob, jak vytvořit, empty_view je použití adaptéru rozsahu empty .

Příklad: 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

Výsledkem je nedefinované chování.

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

Žádná

Vrácená hodnota

Nezaokrouhlovat.

Poznámky

Volání této funkce v sestavení ladění vyvolá kontrolní výraz, že funkce byla volána na prázdném view_interface.

begin

Vrátí, nullptr protože v zobrazení není první prvek.

static constexpr T* begin() noexcept

Vrácená hodnota

nullptr

data

Vrátí, nullptr protože v zobrazení není první prvek, na který se má ukazatel načíst.

static constexpr T* data() noexcept

Vrácená hodnota

nullptr.

empty

Otestujte, zda je odvozené zobrazení prázdné.

static constexpr bool empty() noexcept

Parametry

Žádná

Vrácená hodnota

Vrací objekt true.

end

Vrátí, nullptr protože v zobrazení nejsou žádné prvky.

static constexpr T* end() noexcept

Vrácená hodnota

nullptr.

front

Výsledkem je nedefinované chování.

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

Parametry

Žádná

Vrácená hodnota

Nezaokrouhlovat.

Poznámky

Volání této funkce v sestavení ladění vyvolá kontrolní výraz, že funkce byla volána na prázdném view_interface.

operator[]

Výsledkem je nedefinované chování.

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
Pozice vzhledem k počáteční iterátoru prvku, který se má vrátit.

Vrácená hodnota

Nezaokrouhlovat.

Poznámky

Volání této funkce v sestavení ladění vyvolá kontrolní výraz, který index je mimo rozsah pro view_interface.

operator bool

Otestujte, jestli odvozené zobrazení není prázdné.

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

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

Parametry

Žádná

Vrácená hodnota

Vrací objekt false.

Příklad: (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

Získejte počet prvků v zobrazení, které bude vždy 0.

static constexpr size_t size()

Parametry

Žádná

Vrácená hodnota

0.

Viz také

<ranges>
empty adaptér rozsahu
single_view
zobrazit třídy