Classe empty_view
(Biblioteca Padrão C++)
Uma vista sem elementos. Essa exibição é útil para fins de teste, como chamar o código que precisa ser fornecido com uma exibição, mas não precisa acessar seus dados subjacentes.
Sintaxe
template<class T>
requires std::is_object_v<T>
class empty_view : public ranges::view_interface<empty_view<T>>;
Parâmetros de modelo
T
O tipo do elemento. Mesmo que não haja elementos em um empty_view
, todos os intervalos são homogêneos. Ou seja, eles têm elementos de um tipo particular. Portanto, mesmo que an empty_view
não tenha elementos, ele ainda tem um tipo, como um empty_view
de int
, ou strings
, etc.
Ver características
Para obter uma descrição das entradas a seguir, consulte Exibir características da classe
Característica | Descrição |
---|---|
Adaptador de gama | views::empty |
Intervalo subjacente | Nenhum |
Tipo de elemento | Conforme especificado quando o empty_view é criado |
Exibir categoria do iterador | contiguous_range |
Tamanho | Sim. Sempre retorna 0 |
É const -iterável |
Sim |
Faixa comum | Sim |
Alcance emprestado | Sim |
Membros
Funções de membro | Descrição |
---|---|
ConstrutoresC++20 | Constrói um empty_view . |
begin C++20 |
Retorna nullptr . |
end C++20 |
Retorna nullptr . |
size C++20 |
Retorna 0 |
Herdado de view_interface |
Descrição |
back C++20 |
Resulta em comportamento indefinido. |
data C++20 |
Retorna nullptr . |
empty C++20 |
Retorna true . |
front C++20 |
Resulta em comportamento indefinido. |
operator[] C++20 |
Resulta em comportamento indefinido. |
operator bool C++20 |
Retorna false . |
Comentários
A melhor maneira de criar um empty_view
é usando o adaptador de empty
intervalo. Os adaptadores de intervalo são a maneira pretendida de criar classes de exibição. Os tipos de exibição são expostos caso você queira criar seu próprio tipo de exibição personalizado.
Como nunca pode haver nenhum elemento em um empty_view
, certas otimizações do compilador são possíveis. Por exemplo, o compilador eliminará for (auto e : std::views::empty<int>) {...}
porque sabe que não há nada para iterar.
Outro uso para empty_view
é dividir a split_view
com um empty_view
delimitador, o que resulta em um intervalo de intervalos de elemento único.
Requisitos
Cabeçalho: <ranges>
(desde C++20)
Namespace: std::ranges
Opção do compilador: /std:c++20
ou posterior é necessária.
Construtores
Crie uma instância de uma empty_view
.
template<class T>
inline constexpr empty_view<T> empty{};
Parâmetros
T
O tipo do elemento subjacente, do qual não há nenhum.
Comentários
A melhor maneira de criar um empty_view
é usando o adaptador de empty
intervalo.
Exemplo 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
Resulta em comportamento indefinido.
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>;
Parâmetros
Nenhum.
Valor retornado
Nenhum.
Comentários
Chamar essa função em uma compilação de depuração gera uma afirmação de que a função foi chamada em um arquivo .view_interface
begin
Retorna nullptr
porque não há um primeiro elemento na exibição.
static constexpr T* begin() noexcept
Valor retornado
nullptr
data
Retorna nullptr
porque não há um primeiro elemento na exibição para o qual obter um ponteiro.
static constexpr T* data() noexcept
Valor retornado
nullptr
.
empty
Teste se a exibição derivada está vazia.
static constexpr bool empty() noexcept
Parâmetros
Nenhum.
Valor retornado
Retorna true
.
end
Retorna nullptr
porque não há nenhum elemento na exibição.
static constexpr T* end() noexcept
Valor retornado
nullptr
.
front
Resulta em comportamento indefinido.
constexpr auto front()
requires ranges::forward_range<T>;
constexpr auto front() const
requires ranges::forward_range<const T>;
Parâmetros
Nenhum.
Valor retornado
Nenhum.
Comentários
Chamar essa função em uma compilação de depuração gera uma afirmação de que a função foi chamada em um arquivo .view_interface
operator[]
Resulta em comportamento indefinido.
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;
Parâmetros
pos
A posição, em relação ao iterador inicial, do elemento a ser retornado.
Valor retornado
Nenhum.
Comentários
Chamar essa função em uma compilação de depuração gera uma afirmação de que o índice está fora do intervalo para view_interface
.
operator bool
Teste se a exibição derivada não está vazia.
constexpr explicit operator bool()
requires requires { ranges::empty(T ()); };
constexpr explicit operator bool() const
requires requires { ranges::empty(T ()); };
Parâmetros
Nenhum.
Valor retornado
Retorna false
.
Exemplo (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
Obtenha o número de elementos na exibição, que sempre será 0.
static constexpr size_t size()
Parâmetros
Nenhum.
Valor retornado
0
.