std::ranges:: ref_view
|
Défini dans l'en-tête
<ranges>
|
||
|
template
<
ranges::
range
R
>
requires
std::
is_object_v
<
R
>
|
(depuis C++20) | |
ref_view
est une
view
des éléments d'un autre
range
. Elle encapsule une référence vers ce
range
.
Membres de données
| Membre | Description |
R*
r_
|
un pointeur vers la plage sous-jacente
( objet membre d'exposition uniquement* ) |
Fonctions membres
construit un
ref_view
qui référence la plage donnée
(fonction membre publique) |
|
|
retourne la référence à la plage référencée
(fonction membre publique) |
|
|
retourne l'itérateur de début de la plage référencée
(fonction membre publique) |
|
|
retourne le sentinelle de la plage référencée
(fonction membre publique) |
|
|
vérifie si la plage référencée est vide
(fonction membre publique) |
|
retourne la taille de la
sized_range
référencée
(fonction membre publique) |
|
|
(C++26)
|
retourne la taille approximative de la
approximately_sized_range
référencée
(fonction membre publique) |
retourne le pointeur vers le début de la
contiguous_range
référencée
(fonction membre publique) |
|
Hérité de std::ranges::view_interface |
|
|
(C++23)
|
retourne un itérateur constant vers le début de la plage
(fonction membre publique de
std::ranges::view_interface<D>
)
|
|
(C++23)
|
retourne un sentinelle pour l'itérateur constant de la plage
(fonction membre publique de
std::ranges::view_interface<D>
)
|
|
retourne si la vue dérivée n'est pas vide, fourni uniquement si
ranges::empty
lui est applicable
(fonction membre publique de
std::ranges::view_interface<D>
)
|
|
retourne le premier élément de la vue dérivée, fourni si elle satisfait
forward_range
(fonction membre publique de
std::ranges::view_interface<D>
)
|
|
retourne le dernier élément de la vue dérivée, fourni uniquement si elle satisfait
bidirectional_range
et
common_range
(fonction membre publique de
std::ranges::view_interface<D>
)
|
|
retourne le
n
ème
élément de la vue dérivée, fourni uniquement si elle satisfait
random_access_range
(fonction membre publique de
std::ranges::view_interface<D>
)
|
|
std::ranges::ref_view:: ref_view
|
template
<
/*different-from*/
<
ref_view
>
T
>
requires
std::
convertible_to
<
T, R
&
>
&&
|
(depuis C++20) | |
Initialise
r_
avec
std::
addressof
(
static_cast
<
R
&
>
(
std::
forward
<
T
>
(
t
)
)
)
.
/*different-from*/
<
T, U
>
est satisfait si et seulement si
std::
remove_cvref_t
<
T
>
et
std::
remove_cvref_t
<
U
>
ne sont pas le même type, et les surcharges de
_FUN
sont déclarées comme
void
_FUN
(
R
&
)
;
void
_FUN
(
R
&&
)
=
delete
;
.
Paramètres
| t | - | plage à référencer |
std::ranges::ref_view:: begin
|
constexpr
ranges::
iterator_t
<
R
>
begin
(
)
const
;
|
(depuis C++20) | |
Retourne
ranges::
begin
(
*
r_
)
.
std::ranges::ref_view:: end
|
constexpr
ranges::
sentinel_t
<
R
>
end
(
)
const
;
|
(depuis C++20) | |
Retourne
ranges::
end
(
*
r_
)
.
std::ranges::ref_view:: empty
|
constexpr
bool
empty
(
)
const
requires requires { ranges:: empty ( * r_ ) ; } ; |
(depuis C++20) | |
Retourne
ranges::
empty
(
*
r_
)
.
std::ranges::ref_view:: size
|
constexpr
auto
size
(
)
const
requires ranges:: sized_range < R > ; |
(depuis C++20) | |
Retourne
ranges::
size
(
*
r_
)
.
std::ranges::ref_view:: reserve_hint
|
constexpr
auto
size
(
)
const
requires ranges :: approximately_sized_range < R > ; |
(depuis C++26) | |
Retourne
ranges
::
reserve_hint
(
*
r_
)
.
std::ranges::ref_view:: data
|
constexpr
auto
data
(
)
const
requires ranges:: contiguous_range < R > ; |
(depuis C++20) | |
Retourne
ranges::
data
(
*
r_
)
.
Guides de déduction
|
template
<
class
R
>
ref_view ( R & ) - > ref_view < R > ; |
(depuis C++20) | |
Modèles d'assistance
|
template
<
class
T
>
constexpr bool enable_borrowed_range < ranges :: ref_view < T >> = true ; |
(depuis C++20) | |
Cette spécialisation de
std::ranges::enable_borrowed_range
permet à
ref_view
de satisfaire
borrowed_range
.
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_ranges_reserve_hint
|
202502L
|
(C++26) |
ranges::approximately_sized_range
et
reserve_hint
|
Exemple
#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'; }
Sortie :
call empty(): false call size() : 3 call begin(): c call end() : s call data() : cosmos call base() : 3 range-for : cos
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | S'applique à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| P2325R3 | C++20 |
le constructeur par défaut était fourni car
view
doit être
default_initializable
|
supprimé ainsi que l'exigence |
Voir aussi
|
(C++11)
|
CopyConstructible
et
CopyAssignable
wrapper de référence
(modèle de classe) |
|
(C++20)
|
une
view
avec possession exclusive d'une
range
(modèle de classe) |
|
(C++20)
|
une
view
qui inclut tous les éléments d'une
range
(modèle d'alias) (objet adaptateur de gamme) |