empty_view
class (Standardowa biblioteka C++)
Widok bez elementów. Ten widok jest przydatny do celów testowych, takich jak wywoływanie kodu, który musi być dostarczany z widokiem, ale nie musi uzyskiwać dostępu do danych bazowych.
Składnia
template<class T>
requires std::is_object_v<T>
class empty_view : public ranges::view_interface<empty_view<T>>;
Parametry szablonu
T
Typ elementu. Mimo że nie ma żadnych elementów w obiekcie empty_view
, wszystkie zakresy są jednorodne. Oznacza to, że mają elementy określonego typu. Mimo że element empty_view
nie ma żadnych elementów, nadal ma typ, taki jak empty_view
int
, lub strings
itp.
Właściwości widoku
Opis poniższych wpisów można znaleźć w temacie View class characteristics (Wyświetlanie właściwości klas)
Characteristic | opis |
---|---|
Adapter zakresu | views::empty |
Zakres bazowy | Brak |
Typ elementu | Jak określono podczas empty_view tworzenia |
Wyświetl kategorię iteratora | contiguous_range |
Wielkości | Tak. Zawsze zwraca wartość 0 |
Jest const iterowalne |
Tak |
Wspólny zakres | Tak |
Pożyczony zakres | Tak |
Elementy członkowskie
Funkcje składowe | Opis |
---|---|
KonstruktoryC++20 | Skonstruuj element empty_view . |
begin C++20 |
Zwraca wartość nullptr . |
end C++20 |
Zwraca wartość nullptr . |
size C++20 |
Zwraca wartość 0 |
Dziedziczone z view_interface |
Opis |
back C++20 |
Powoduje niezdefiniowane zachowanie. |
data C++20 |
Zwraca wartość nullptr . |
empty C++20 |
Zwraca wartość true . |
front C++20 |
Powoduje niezdefiniowane zachowanie. |
operator[] C++20 |
Powoduje niezdefiniowane zachowanie. |
operator bool C++20 |
Zwraca wartość false . |
Uwagi
Najlepszym sposobem utworzenia elementu empty_view
jest użycie adaptera empty
zakresu. Adaptery zakresów są zamierzonym sposobem tworzenia klas widoków. Typy widoków są widoczne w przypadku utworzenia własnego niestandardowego typu widoku.
Ponieważ w elemecie empty_view
nie może być żadnych elementów , niektóre optymalizacje kompilatora są możliwe. Na przykład kompilator zostanie wyeliminowany for (auto e : std::views::empty<int>) {...}
, ponieważ wie, że nie ma nic do iterowania.
Innym zastosowaniem metody empty_view
jest dzielenie split_view
elementu z empty_view
ogranicznikiem, co skutkuje zakresem zakresów pojedynczych elementów.
Wymagania
Nagłówek: <ranges>
(od C++20)
Przestrzeń nazw: std::ranges
Opcja kompilatora: /std:c++20
lub nowsza jest wymagana.
Konstruktory
Utwórz wystąpienie klasy empty_view
.
template<class T>
inline constexpr empty_view<T> empty{};
Parametry
T
Typ podstawowego elementu, którego nie ma.
Uwagi
Najlepszym sposobem utworzenia elementu empty_view
jest użycie adaptera empty
zakresu.
Przykład: 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
Powoduje niezdefiniowane zachowanie.
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
Brak.
Wartość zwracana
Brak.
Uwagi
Wywołanie tej funkcji w kompilacji debugowania wywołuje potwierdzenie, że funkcja została wywołana na pustym view_interface
obiekcie .
begin
Zwraca wartość nullptr
, ponieważ w widoku nie ma pierwszego elementu.
static constexpr T* begin() noexcept
Wartość zwracana
nullptr
data
Zwraca wartość nullptr
, ponieważ w widoku nie ma pierwszego elementu w celu uzyskania wskaźnika.
static constexpr T* data() noexcept
Wartość zwracana
nullptr
.
empty
Sprawdź, czy widok pochodny jest pusty.
static constexpr bool empty() noexcept
Parametry
Brak.
Wartość zwracana
Zwraca wartość true
.
end
Zwraca wartość nullptr
, ponieważ w widoku nie ma żadnych elementów.
static constexpr T* end() noexcept
Wartość zwracana
nullptr
.
front
Powoduje niezdefiniowane zachowanie.
constexpr auto front()
requires ranges::forward_range<T>;
constexpr auto front() const
requires ranges::forward_range<const T>;
Parametry
Brak.
Wartość zwracana
Brak.
Uwagi
Wywołanie tej funkcji w kompilacji debugowania wywołuje potwierdzenie, że funkcja została wywołana na pustym view_interface
obiekcie .
operator[]
Powoduje niezdefiniowane zachowanie.
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
Pozycja względem iteratora początkowego elementu do zwrócenia.
Wartość zwracana
Brak.
Uwagi
Wywołanie tej funkcji w kompilacji debugowania wywołuje potwierdzenie, że indeks jest poza zakresem dla elementu view_interface
.
operator bool
Sprawdź, czy widok pochodny nie jest pusty.
constexpr explicit operator bool()
requires requires { ranges::empty(T ()); };
constexpr explicit operator bool() const
requires requires { ranges::empty(T ()); };
Parametry
Brak.
Wartość zwracana
Zwraca wartość false
.
Przykład: (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
Pobierz liczbę elementów w widoku, które zawsze będą mieć wartość 0.
static constexpr size_t size()
Parametry
Brak.
Wartość zwracana
0
.