std:: uses_allocator
|
Défini dans l'en-tête
<memory>
|
||
|
template
<
class
T,
class
Alloc
>
struct uses_allocator ; |
(depuis C++11) | |
Si
T
a un type imbriqué
allocator_type
qui est convertible depuis
Alloc
, la constante membre
value
vaut
true
. Sinon
value
vaut
false
.
Table des matières |
Modèle de variable d'assistance
|
template
<
class
T,
class
Alloc
>
constexpr bool uses_allocator_v = uses_allocator < T, Alloc > :: value ; |
(depuis C++17) | |
Hérité de std:: integral_constant
Constantes membres
|
value
[static]
|
true
si
T
utilise l'allocateur
Alloc
,
false
sinon
(constante membre publique statique) |
Fonctions membres
|
operator bool
|
convertit l'objet en
bool
, retourne
value
(fonction membre publique) |
|
operator()
(C++14)
|
retourne
value
(fonction membre publique) |
Types membres
| Type | Définition |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
Construction avec allocateur
Il existe trois conventions pour passer un allocateur
alloc
au constructeur d'un type
T
:
-
Si
Tn'utilise pas un allocateur compatible ( std :: uses_allocator_v < T, Alloc > est false ), alorsallocest ignoré. - Sinon, std :: uses_allocator_v < T, Alloc > est true , et
-
-
si
Tutilise la convention d'allocateur en tête (est invocable comme T ( std:: allocator_arg , alloc, args... ) ), alors la construction avec allocateur utilise cette forme. -
si
Tutilise la convention d'allocateur en queue (est invocable comme T ( args..., alloc ) ), alors la construction avec allocateur utilise cette forme. - Sinon, le programme est mal formé (cela signifie que std :: uses_allocator_v < T, Alloc > est true , mais le type ne suit aucune des deux conventions autorisées).
-
si
-
En tant que cas particulier,
std::pair
est traité comme un type utilisant un allocateur même si
std::uses_allocatorest false pour les paires (contrairement à par exemple std::tuple ) : voir les surcharges spécifiques aux paires de std::pmr::polymorphic_allocator::construct et std::scoped_allocator_adaptor::construct (jusqu'à C++20) std::uses_allocator_construction_args (depuis C++20) .
|
Les fonctions utilitaires std::make_obj_using_allocator , et std::uninitialized_construct_using_allocator peuvent être utilisées pour créer explicitement un objet suivant le protocole ci-dessus, et std::uses_allocator_construction_args peut être utilisée pour préparer la liste d'arguments qui correspond au type de construction uses-allocator attendu par le type. |
(depuis C++20) |
Spécialisations
Étant donné un
type défini par le programme
T
qui ne possède pas de
allocator_type
imbriqué, un programme peut spécialiser
std::uses_allocator
pour dériver de
std::true_type
pour
T
si l'une des exigences suivantes est satisfaite :
-
Tpossède un constructeur qui prend std::allocator_arg_t comme premier argument, etAlloccomme second argument. -
Tpossède un constructeur qui prendAlloccomme dernier argument.
Dans ce qui précède,
Alloc
est un type qui satisfait
Allocator
ou est un type pointeur convertible en
std::experimental::pmr::memory_resource*
(library fundamentals TS)
.
Les spécialisations suivantes sont déjà fournies par la bibliothèque standard :
|
(C++11)
|
spécialise le trait de type
std::uses_allocator
(spécialisation de modèle de classe) |
|
(C++11)
|
spécialise le trait de type
std::uses_allocator
(spécialisation de modèle de classe) |
|
spécialise le trait de type
std::uses_allocator
(spécialisation de modèle de classe) |
|
|
(C++11)
|
spécialise le trait de type
std::uses_allocator
(spécialisation de modèle de classe) |
|
spécialise le trait de type
std::uses_allocator
(spécialisation de modèle de classe) |
|
|
spécialise le trait de type
std::uses_allocator
(spécialisation de modèle de classe) |
|
|
spécialise le trait de type
std::uses_allocator
(spécialisation de modèle de classe) |
|
|
spécialise le trait de type
std::uses_allocator
(spécialisation de modèle de classe) |
|
|
(C++11)
(jusqu'à C++17)
|
spécialise le trait de type
std::uses_allocator
(spécialisation de modèle de classe) |
|
spécialise le trait de type
std::uses_allocator
(spécialisation de modèle de classe) |
|
|
(C++11)
(jusqu'à C++17)
|
spécialise le trait de type
std::uses_allocator
(spécialisation de modèle de classe) |
Notes
Ce trait de type est utilisé par std::tuple , std::scoped_allocator_adaptor , et std::pmr::polymorphic_allocator . Il peut également être utilisé par des allocateurs personnalisés ou des types wrapper pour déterminer si l'objet ou le membre en cours de construction est lui-même capable d'utiliser un allocateur (par exemple, s'il s'agit d'un conteneur), auquel cas un allocateur doit être passé à son constructeur.
Voir aussi
|
(C++11)
|
une balise utilisée pour sélectionner les constructeurs prenant en compte l'allocateur
(balise) |
|
(C++20)
|
prépare la liste d'arguments correspondant au type de construction uses-allocator requis par le type donné
(modèle de fonction) |
|
(C++20)
|
crée un objet du type donné au moyen d'une construction uses-allocator
(modèle de fonction) |
|
crée un objet du type donné à un emplacement mémoire spécifié au moyen d'une construction uses-allocator
(modèle de fonction) |
|
|
(C++11)
|
implémente un allocateur multi-niveaux pour les conteneurs multi-niveaux
(modèle de classe) |