empty_view
Klasse (C++-Standardbibliothek)
Eine Ansicht ohne Elemente. Diese Ansicht ist für Testzwecke nützlich, z. B. zum Aufrufen von Code, der mit einer Ansicht bereitgestellt werden muss, aber nicht auf die zugrunde liegenden Daten zugreifen muss.
Syntax
template<class T>
requires std::is_object_v<T>
class empty_view : public ranges::view_interface<empty_view<T>>;
Vorlagenparameter
T
Der Typ des Elements. Obwohl in einem empty_view
Bereich keine Elemente vorhanden sind, sind alle Bereiche homogen. Das heißt, sie haben Elemente eines bestimmten Typs. Obwohl ein Element empty_view
keine Elemente hat, hat es immer noch einen Typ, z. B. einen empty_view
von int
, oder strings
usw.
Eigenschaften der Ansicht
Eine Beschreibung der folgenden Einträge finden Sie unter Anzeigen von Klassenmerkmalen
Merkmal | Beschreibung |
---|---|
Range Adaptor | views::empty |
Zugrunde liegender Bereich | Keine |
Elementtyp | Wie angegeben, wenn die Erstellung erfolgt empty_view |
Iteratorkategorie anzeigen | contiguous_range |
Größer eingestellt | Ja. Gibt immer 0 zurück. |
Ist const -iterierbar |
Ja |
Allgemeiner Bereich | Ja |
Geliehener Bereich | Ja |
Member
Memberfunktionen | Beschreibung |
---|---|
Konstruktoren C++20 | Erstellen eines empty_view . |
begin C++20 |
Gibt nullptr zurück. |
end C++20 |
Gibt nullptr zurück. |
size C++20 |
Gibt 0 (null) zurück |
Geerbt von view_interface |
Beschreibung |
back C++20 |
Führt zu einem nicht definierten Verhalten. |
data C++20 |
Gibt nullptr zurück. |
empty C++20 |
Gibt true zurück. |
front C++20 |
Führt zu einem nicht definierten Verhalten. |
operator[] C++20 |
Führt zu einem nicht definierten Verhalten. |
operator bool C++20 |
Gibt false zurück. |
Hinweise
Die beste Methode zum Erstellen eines Steuerelements empty_view
ist die Verwendung des empty
Bereichsadapters. Bereichsadapter sind die beabsichtigte Möglichkeit zum Erstellen von Ansichtsklassen. Die Ansichtstypen werden für den Fall verfügbar gemacht, dass Sie ihren eigenen benutzerdefinierten Ansichtstyp erstellen möchten.
Da es niemals Elemente in einer empty_view
Compileroptimierung geben kann, sind bestimmte Compileroptimierungen möglich. Beispielsweise wird der Compiler eliminiert for (auto e : std::views::empty<int>) {...}
, da er weiß, dass nichts zu durchlaufen ist.
Eine weitere Verwendung ist empty_view
das Aufteilen eines split_view
empty_view
Trennzeichens, was zu einem Bereich einzelner Elementbereiche führt.
Anforderungen
Header: <ranges>
(seit C++20)
Namespace:std::ranges
Compileroption: /std:c++20
oder höher ist erforderlich.
Konstruktoren
Erstellen Sie eine Instanz von empty_view
.
template<class T>
inline constexpr empty_view<T> empty{};
Parameter
T
Der Typ des zugrunde liegenden Elements, von dem keine vorhanden ist.
Hinweise
Die beste Methode zum Erstellen eines Steuerelements empty_view
ist die Verwendung des empty
Bereichsadapters.
Beispiel: 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
Führt zu einem nicht definierten Verhalten.
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>;
Parameter
Keine
Rückgabewert
Keine.
Hinweise
Das Aufrufen dieser Funktion in einem Debugbuild löst eine Assertion aus, die für eine leere view_interface
Funktion aufgerufen wurde.
begin
Gibt zurück nullptr
, da es kein erstes Element in der Ansicht gibt.
static constexpr T* begin() noexcept
Rückgabewert
nullptr
data
Gibt zurück nullptr
, da kein erstes Element in der Ansicht vorhanden ist, um einen Zeiger abzurufen.
static constexpr T* data() noexcept
Rückgabewert
nullptr
.
empty
Testen Sie, ob die abgeleitete Ansicht leer ist.
static constexpr bool empty() noexcept
Parameter
Keine
Rückgabewert
Gibt true
zurück.
end
Gibt zurück nullptr
, da in der Ansicht keine Elemente vorhanden sind.
static constexpr T* end() noexcept
Rückgabewert
nullptr
.
front
Führt zu einem nicht definierten Verhalten.
constexpr auto front()
requires ranges::forward_range<T>;
constexpr auto front() const
requires ranges::forward_range<const T>;
Parameter
Keine
Rückgabewert
Keine.
Hinweise
Das Aufrufen dieser Funktion in einem Debugbuild löst eine Assertion aus, die für eine leere view_interface
Funktion aufgerufen wurde.
operator[]
Führt zu einem nicht definierten Verhalten.
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;
Parameter
pos
Die Position relativ zum Anfangs iterator des zurückzugebenden Elements.
Rückgabewert
Keine.
Hinweise
Das Aufrufen dieser Funktion in einem Debugbuild löst eine Assertion aus, für die der Index außerhalb des Bereichs view_interface
liegt.
operator bool
Testen Sie, ob die abgeleitete Ansicht nicht leer ist.
constexpr explicit operator bool()
requires requires { ranges::empty(T ()); };
constexpr explicit operator bool() const
requires requires { ranges::empty(T ()); };
Parameter
Keine
Rückgabewert
Gibt false
zurück.
Beispiel: (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
Rufen Sie die Anzahl der Elemente in der Ansicht ab, die immer 0 sind.
static constexpr size_t size()
Parameter
Keine
Rückgabewert
0
.
Siehe auch
<ranges>
empty
Range Adaptor
single_view
Anzeigen von Klassen