Partager via


empty_view classe (bibliothèque standard C++)

Vue sans éléments. Cette vue est utile à des fins de test telles que l’appel de code qui doit être fourni avec une vue, mais n’a pas besoin d’accéder à ses données sous-jacentes.

Syntaxe

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

Paramètres de modèle

T
Type de l'élément. Même s’il n’y a aucun élément dans un empty_view, toutes les plages sont homogènes. Autrement dit, ils ont des éléments d’un type particulier. Ainsi, même si un empty_view n’a aucun élément, il a toujours un type, tel qu’un empty_view , intou strings, etc.

Afficher les caractéristiques

Pour obtenir une description des entrées suivantes, consultez les caractéristiques de classe View

Caractéristique Description
Adaptateur de plage views::empty
Plage sous-jacente Aucune
Type d’élément Comme spécifié lors de la création de l’objet empty_view
Afficher la catégorie d’itérateur contiguous_range
Taille Oui. Retourne toujours 0
Est const-itérable Oui
Plage commune Oui
Plage empruntée Oui

Membres

Fonctions membres Description
Constructeurs C++20 Construire un empty_view.
beginC++20 Retourne nullptr.
endC++20 Retourne nullptr.
sizeC++20 Retourne 0
Hérité de view_interface Description
backC++20 Entraîne un comportement non défini.
dataC++20 Retourne nullptr.
emptyC++20 Retourne true.
frontC++20 Entraîne un comportement non défini.
operator[]C++20 Entraîne un comportement non défini.
operator boolC++20 Retourne false.

Notes

La meilleure façon de créer un empty_view est d’utiliser l’adaptateur empty de plage. Les adaptateurs de plage sont la méthode prévue pour créer des classes d’affichage. Les types d’affichage sont exposés au cas où vous souhaitez créer votre propre type d’affichage personnalisé.

Étant donné qu’il ne peut jamais y avoir d’éléments dans un empty_view, certaines optimisations du compilateur sont possibles. Par exemple, le compilateur élimine for (auto e : std::views::empty<int>) {...} , car il sait qu’il n’y a rien à itérer.

Une autre utilisation consiste à empty_view fractionner un empty_view split_view délimiteur, ce qui entraîne une plage de plages d’éléments uniques.

Spécifications

En-tête : <ranges> (depuis C++20)

Espace de noms : std::ranges

Option du compilateur : /std:c++20 ou version ultérieure est requise.

Constructeurs

Créez une instance de empty_view.

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

Paramètres

T
Type de l’élément sous-jacent, dont il n’existe aucun.

Notes

La meilleure façon de créer un empty_view est d’utiliser l’adaptateur empty de plage.

Exemple 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

Entraîne un comportement non défini.

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>;

Paramètres

Aucune.

Valeur retournée

Aucune.

Notes

L’appel de cette fonction dans une build de débogage déclenche une assertion selon laquelle la fonction a été appelée sur un objet vide view_interface.

begin

Retourne nullptr , car il n’y a pas de premier élément dans la vue.

static constexpr T* begin() noexcept

Valeur retournée

nullptr

data

Retourne nullptr , car il n’existe pas de premier élément dans la vue pour obtenir un pointeur vers.

static constexpr T* data() noexcept

Valeur retournée

nullptr.

empty

Testez si la vue dérivée est vide.

static constexpr bool empty() noexcept

Paramètres

Aucune.

Valeur retournée

Retourne true.

end

Retourne nullptr , car il n’y a pas d’éléments dans la vue.

static constexpr T* end() noexcept

Valeur retournée

nullptr.

front

Entraîne un comportement non défini.

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

Paramètres

Aucune.

Valeur retournée

Aucune.

Notes

L’appel de cette fonction dans une build de débogage déclenche une assertion selon laquelle la fonction a été appelée sur un objet vide view_interface.

operator[]

Entraîne un comportement non défini.

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;

Paramètres

pos
Position, par rapport à l’itérateur de début, de l’élément à retourner.

Valeur retournée

Aucune.

Notes

L’appel de cette fonction dans une build de débogage déclenche une assertion pour laquelle l’index est hors limites view_interface.

operator bool

Testez si la vue dérivée n’est pas vide.

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

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

Paramètres

Aucune.

Valeur retournée

Retourne false.

Exemple (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

Obtenez le nombre d’éléments dans la vue, qui seront toujours 0.

static constexpr size_t size()

Paramètres

Aucune.

Valeur retournée

0.

Voir aussi

<ranges>
empty adaptateur de plage
single_view
afficher les classes