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
, int
ou 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 . |
begin C++20 |
Retourne nullptr . |
end C++20 |
Retourne nullptr . |
size C++20 |
Retourne 0 |
Hérité de view_interface |
Description |
back C++20 |
Entraîne un comportement non défini. |
data C++20 |
Retourne nullptr . |
empty C++20 |
Retourne true . |
front C++20 |
Entraîne un comportement non défini. |
operator[] C++20 |
Entraîne un comportement non défini. |
operator bool C++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