Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
.