Namespaces
Variants

std:: uses_allocator

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
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 T n'utilise pas un allocateur compatible ( std :: uses_allocator_v < T, Alloc > est false ), alors alloc est ignoré.
  • Sinon, std :: uses_allocator_v < T, Alloc > est true , et
  • si T utilise 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 T utilise 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).

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 :

  • T possède un constructeur qui prend std::allocator_arg_t comme premier argument, et Alloc comme second argument.
  • T possède un constructeur qui prend Alloc comme 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 :

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)
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)
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

une balise utilisée pour sélectionner les constructeurs prenant en compte l'allocateur
(balise)
prépare la liste d'arguments correspondant au type de construction uses-allocator requis par le type donné
(modèle de fonction)
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)
implémente un allocateur multi-niveaux pour les conteneurs multi-niveaux
(modèle de classe)