std::ranges:: ref_view
|
Definido en el encabezado
<ranges>
|
||
|
template
<
ranges::
range
R
>
requires
std::
is_object_v
<
R
>
|
(desde C++20) | |
ref_view
es una
view
de los elementos de algún otro
range
. Envuelve una referencia a ese
range
.
Miembros de datos
| Miembro | Descripción |
R*
r_
|
un puntero al rango subyacente
( objeto miembro solo para exposición* ) |
Funciones miembro
construye un
ref_view
que referencia al rango dado
(función miembro pública) |
|
|
devuelve las referencias al rango referenciado
(función miembro pública) |
|
|
devuelve el iterador inicial del rango referenciado
(función miembro pública) |
|
|
devuelve el centinela del rango referenciado
(función miembro pública) |
|
|
comprueba si el rango referenciado está vacío
(función miembro pública) |
|
devuelve el tamaño del
sized_range
referenciado
(función miembro pública) |
|
|
(C++26)
|
devuelve el tamaño aproximado del
approximately_sized_range
referenciado
(función miembro pública) |
devuelve el puntero al inicio del
contiguous_range
referenciado
(función miembro pública) |
|
Heredado de std::ranges::view_interface |
|
|
(C++23)
|
devuelve un iterador constante al inicio del rango
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
(C++23)
|
devuelve un centinela para el iterador constante del rango
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
devuelve si la vista derivada no está vacía, proporcionado solo si
ranges::empty
es aplicable a ella
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
devuelve el primer elemento en la vista derivada, proporcionado si satisface
forward_range
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
devuelve el último elemento en la vista derivada, proporcionado solo si satisface
bidirectional_range
y
common_range
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
devuelve el elemento
n
ésimo
en la vista derivada, proporcionado solo si satisface
random_access_range
(función miembro pública de
std::ranges::view_interface<D>
)
|
|
std::ranges::ref_view:: ref_view
|
template
<
/*different-from*/
<
ref_view
>
T
>
requires
std::
convertible_to
<
T, R
&
>
&&
|
(desde C++20) | |
Inicializa
r_
con
std::
addressof
(
static_cast
<
R
&
>
(
std::
forward
<
T
>
(
t
)
)
)
.
/*different-from*/
<
T, U
>
se satisface si y solo si
std::
remove_cvref_t
<
T
>
y
std::
remove_cvref_t
<
U
>
no son el mismo tipo, y las sobrecargas de
_FUN
se declaran como
void
_FUN
(
R
&
)
;
void
_FUN
(
R
&&
)
=
delete
;
.
Parámetros
| t | - | rango a referenciar |
std::ranges::ref_view:: begin
|
constexpr
ranges::
iterator_t
<
R
>
begin
(
)
const
;
|
(desde C++20) | |
Devuelve
ranges::
begin
(
*
r_
)
.
std::ranges::ref_view:: end
|
constexpr
ranges::
sentinel_t
<
R
>
end
(
)
const
;
|
(desde C++20) | |
Devuelve
ranges::
end
(
*
r_
)
.
std::ranges::ref_view:: empty
|
constexpr
bool
empty
(
)
const
requires requires { ranges:: empty ( * r_ ) ; } ; |
(desde C++20) | |
Devuelve
ranges::
empty
(
*
r_
)
.
std::ranges::ref_view:: size
|
constexpr
auto
size
(
)
const
requires ranges:: sized_range < R > ; |
(desde C++20) | |
Devuelve
ranges::
size
(
*
r_
)
.
std::ranges::ref_view:: reserve_hint
|
constexpr
auto
size
(
)
const
requires ranges :: approximately_sized_range < R > ; |
(desde C++26) | |
Devuelve
ranges
::
reserve_hint
(
*
r_
)
.
std::ranges::ref_view:: data
|
constexpr
auto
data
(
)
const
requires ranges:: contiguous_range < R > ; |
(desde C++20) | |
Devuelve
ranges::
data
(
*
r_
)
.
Guías de deducción
|
template
<
class
R
>
ref_view ( R & ) - > ref_view < R > ; |
(desde C++20) | |
Plantillas auxiliares
|
template
<
class
T
>
constexpr bool enable_borrowed_range < ranges :: ref_view < T >> = true ; |
(desde C++20) | |
Esta especialización de
std::ranges::enable_borrowed_range
hace que
ref_view
satisfaga
borrowed_range
.
Notas
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_ranges_reserve_hint
|
202502L
|
(C++26) |
ranges::approximately_sized_range
y
reserve_hint
|
Ejemplo
#include <iostream> #include <ranges> int main() { const std::string s{"cosmos"}; const std::ranges::take_view tv{s, 3}; const std::ranges::ref_view rv{tv}; std::cout << std::boolalpha << "call empty(): " << rv.empty() << '\n' << "call size() : " << rv.size() << '\n' << "call begin(): " << *rv.begin() << '\n' << "call end() : " << *(rv.end() - 1) << '\n' << "call data() : " << rv.data() << '\n' << "call base() : " << rv.base().size() << '\n' // ~> tv.size() << "range-for : "; for (const auto c : rv) std::cout << c; std::cout << '\n'; }
Salida:
call empty(): false call size() : 3 call begin(): c call end() : s call data() : cosmos call base() : 3 range-for : cos
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| P2325R3 | C++20 |
el constructor por defecto se proporcionaba como
view
debe ser
default_initializable
|
eliminado junto con el requisito |
Véase también
|
(C++11)
|
CopyConstructible
y
CopyAssignable
envoltorio de referencia
(plantilla de clase) |
|
(C++20)
|
una
view
con propiedad exclusiva de algún
range
(plantilla de clase) |
|
(C++20)
|
una
view
que incluye todos los elementos de un
range
(plantilla de alias) (objeto adaptador de rango) |