Assignable wrapper (C++20)
|
template
<
class
T
>
requires
std::
copy_constructible
<
T
>
&&
std::
is_object_v
<
T
>
|
(depuis C++20)
(jusqu'à C++23) ( exposition uniquement* ) |
|
|
template
<
class
T
>
requires
std::
move_constructible
<
T
>
&&
std::
is_object_v
<
T
>
|
(depuis C++23)
( exposition uniquement* ) |
|
ranges::single_view
,
ranges::repeat_view
,
(depuis C++23)
et les adaptateurs de gamme qui stockent un objet invocable sont spécifiés en termes d'un modèle de classe d'exposition uniquement
copyable-box
(jusqu'à C++23)
movable-box
(depuis C++23)
. Le nom affiché ici est uniquement à des fins d'exposition.
Le wrapper se comporte exactement comme
std::
optional
<
T
>
, sauf que le constructeur par défaut, l'opérateur d'affectation par copie et l'opérateur d'affectation par déplacement sont (conditionnellement) différents de ceux de
std::optional
, ce qui augmente
T
avec l'assignabilité lorsque nécessaire et le fait toujours satisfaire
copyable
ou
movable
(depuis C++23)
.
|
Si
|
(jusqu'à C++23) |
|
Si
/*movable-box*/
<
T
>
peut stocker uniquement un objet
|
(depuis C++23) |
Table des matières |
Paramètres du modèle
| T | - |
le type de la valeur contenue, doit être un type objet qui modélise
copy_constructible
(jusqu'en C++23)
move_constructible
(depuis C++23)
|
Fonctions membres
Constructeur par défaut
|
constexpr
/*copyable-box*/
(
)
noexcept
(
std::
is_nothrow_default_constructible_v
<
T
>
)
requires
std::
default_initializable
<
T
>
|
(depuis C++20)
(jusqu'à C++23) |
|
|
constexpr
/*movable-box*/
(
)
noexcept
(
std::
is_nothrow_default_constructible_v
<
T
>
)
requires
std::
default_initializable
<
T
>
|
(depuis C++23) | |
Le constructeur par défaut est fourni si et seulement si
T
modélise
default_initializable
.
Un wrapper construit par défaut contient un objet
T
initialisé par valeur.
Opérateurs d'affectation
| (1) | ||
|
constexpr
/*copyable-box*/
&
operator
=
(
const
/*copyable-box*/
&
other
)
;
noexcept ( /* voir ci-dessous */ ) ; |
(depuis C++20)
(jusqu'à C++23) |
|
|
constexpr
/*movable-box*/
&
operator
=
(
const
/*movable-box*/
&
other
)
;
noexcept ( /* voir ci-dessous */ ) requires std:: copy_constructible < T > ; |
(depuis C++23) | |
| (2) | ||
|
constexpr
/*copyable-box*/
&
operator
=
(
/*copyable-box*/
&&
other
)
noexcept ( std:: is_nothrow_move_constructible_v < T > ) ; |
(depuis C++20)
(jusqu'à C++23) |
|
|
constexpr
/*movable-box*/
&
operator
=
(
/*movable-box*/
&&
other
)
noexcept ( std:: is_nothrow_move_constructible_v < T > ) ; |
(depuis C++23) | |
|
constexpr
/*copyable-box*/
&
operator
=
(
const
/*copyable-box*/
&
other
)
|
(jusqu'en C++23) |
|
constexpr
/*movable-box*/
&
operator
=
(
const
/*movable-box*/
&
other
)
|
(depuis C++23) |
std::optional
.
|
constexpr
/*copyable-box*/
&
operator
=
(
/*copyable-box*/
&&
other
)
|
(jusqu'en C++23) |
|
constexpr
/*movable-box*/
&
operator
=
(
/*movable-box*/
&&
other
)
|
(depuis C++23) |
std::optional
.
Membres identiques à std:: optional
Fonctions membres
construit l'objet
optional
(fonction membre publique de
std::optional<T>
)
|
|
|
détruit la valeur contenue, s'il y en a une
(fonction membre publique de
std::optional<T>
)
|
|
|
assigne le contenu
(fonction membre publique de
std::optional<T>
)
|
|
Observateurs |
|
|
accède à la valeur contenue
(fonction membre publique de
std::optional<T>
)
|
|
|
vérifie si l'objet contient une valeur
(fonction membre publique de
std::optional<T>
)
|
|
Modificateurs |
|
|
détruit toute valeur contenue
(fonction membre publique de
std::optional<T>
)
|
|
|
construit la valeur contenue en place
(fonction membre publique de
std::optional<T>
)
|
|
Notes
Un
copyable-box
(jusqu'à C++23)
movable-box
(depuis C++23)
ne contient une valeur que si
-
Tne modélise pasmovableoucopyable, et une exception est levée lors de l'affectation par déplacement ou de l'affectation par copie respectivement, ou - il est initialisé/affecté à partir d'un autre wrapper sans valeur.
Avant
P2325R3
, le wrapper était appelé
semiregular-box
dans la norme et satisfaisait toujours
semiregular
, car le constructeur par défaut était toujours fourni (ce qui pouvait construire un wrapper sans valeur).
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_ranges
|
201911L
|
(C++20) | Bibliothèque de plages et algorithmes contraints |
202106L
|
(C++20)
(DR) |
Vues non initialisables par défaut | |
202207L
|
(C++23) | Assouplissement des adaptateurs de plages pour autoriser les types non copiables |
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 | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| P2325R3 | C++20 |
si
T
n'est pas
default_initializable
, le constructeur par défaut
construit un wrapper qui ne contient pas de valeur |
le wrapper n'est également
pas
default_initializable
|
| LWG 3572 | C++20 | les opérateurs d'affectation conditionnellement différents n'étaient pas constexpr | rendus constexpr |
Voir aussi
une
view
qui contient un seul élément d'une valeur spécifiée
(modèle de classe) (objet de point de personnalisation) |
|
une
view
constituée d'une séquence générée en produisant répétitivement la même valeur
(modèle de classe) (objet de point de personnalisation) |
|
une
view
qui consiste en les éléments d'un
range
qui satisfont un prédicat
(modèle de classe) (objet adaptateur de gamme) |
|
une
view
d'une séquence qui applique une fonction de transformation à chaque élément
(modèle de classe) (objet adaptateur de gamme) |
|
une
view
constituée des éléments initiaux d'une autre
view
, jusqu'au premier élément sur lequel un prédicat retourne
false
(modèle de classe) (objet adaptateur de gamme) |
|
une
view
constituée des éléments d'une autre
view
, en sautant la sous-séquence initiale d'éléments jusqu'au premier élément où le prédicat retourne
false
(modèle de classe) (objet adaptateur de gamme) |
|
une
view
constituée des résultats de l'application d'une fonction de transformation aux éléments correspondants des vues adaptées
(modèle de classe) (objet de point de personnalisation) |
|
une
view
constituée des résultats de l'application d'une fonction de transformation aux éléments adjacents de la vue adaptée
(modèle de classe) (objet adaptateur de gamme) |