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 , int
nebo 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 . |
begin C++20 |
Vrací objekt nullptr . |
end C++20 |
Vrací objekt nullptr . |
size C++20 |
Vrátí hodnotu 0. |
Zděděno z view_interface |
Popis |
back C++20 |
Výsledkem je nedefinované chování. |
data C++20 |
Vrací objekt nullptr . |
empty C++20 |
Vrací objekt true . |
front C++20 |
Výsledkem je nedefinované chování. |
operator[] C++20 |
Výsledkem je nedefinované chování. |
operator bool C++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_view
pří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
.