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)
Definiert im Header <memory>
template < class T, class Alloc >
struct uses_allocator ;
(seit C++11)

Falls T einen geschachtelten Typ allocator_type besitzt, der von Alloc konvertierbar ist, ist die Member-Konstante value gleich true . Andernfalls ist value gleich false .

Inhaltsverzeichnis

Hilfsvariablen-Template

template < class T, class Alloc >
constexpr bool uses_allocator_v = uses_allocator < T, Alloc > :: value ;
(seit C++17)

Geerbt von std:: integral_constant

Member-Konstanten

value
[static]
true falls T Allokator Alloc verwendet, false andernfalls
(öffentliche statische Member-Konstante)

Member-Funktionen

operator bool
konvertiert das Objekt zu bool , gibt value zurück
(öffentliche Member-Funktion)
operator()
(C++14)
gibt value zurück
(öffentliche Member-Funktion)

Member-Typen

Typ Definition
value_type bool
type std:: integral_constant < bool , value >

Uses-allocator-Konstruktion

Es gibt drei Konventionen, um einen Allokator alloc an einen Konstruktor eines Typs T zu übergeben:

  • Wenn T keinen kompatiblen Allokator verwendet ( std :: uses_allocator_v < T, Alloc > ist false ), wird alloc ignoriert.
  • Andernfalls ist std :: uses_allocator_v < T, Alloc > true , und
  • Falls T die Leading-Allocator-Konvention verwendet (aufrufbar als T ( std:: allocator_arg , alloc, args... ) ), dann verwendet die Uses-Allocator-Konstruktion diese Form.
  • Falls T die Trailing-Allocator-Konvention verwendet (aufrufbar als T ( args..., alloc ) ), dann verwendet die Uses-Allocator-Konstruktion diese Form.
  • Andernfalls ist das Programm fehlerhaft (dies bedeutet, dass std :: uses_allocator_v < T, Alloc > true ist, aber der Typ keiner der beiden erlaubten Konventionen folgt).

Die Hilfsfunktionen std::make_obj_using_allocator und std::uninitialized_construct_using_allocator können verwendet werden, um explizit ein Objekt gemäß dem oben genannten Protokoll zu erstellen, und std::uses_allocator_construction_args kann verwendet werden, um die Argumentenliste vorzubereiten, die der Art der uses-allocator-Konstruktion entspricht, die vom Typ erwartet wird.

(since C++20)

Spezialisierungen

Gegeben ein programmdefinierter Typ T , der keinen geschachtelten allocator_type besitzt, kann ein Programm std::uses_allocator spezialisieren, um von std::true_type für T abzuleiten, falls eine der folgenden Anforderungen erfüllt ist:

  • T verfügt über einen Konstruktor, der std::allocator_arg_t als ersten Parameter und Alloc als zweiten Parameter akzeptiert.
  • T verfügt über einen Konstruktor, der Alloc als letzten Parameter akzeptiert.

Im obigen Kontext ist Alloc ein Typ, der die Anforderungen eines Allocator erfüllt oder ein Zeigertyp, der in std::experimental::pmr::memory_resource* (library fundamentals TS) konvertierbar ist.

Die folgenden Spezialisierungen werden bereits von der Standardbibliothek bereitgestellt:

spezialisiert das std::uses_allocator Typ-Trait
(Klassen-Template-Spezialisierung)
spezialisiert das std::uses_allocator Typ-Trait
(Klassen-Template-Spezialisierung)
spezialisiert das std::uses_allocator Typ-Trait
(Klassen-Template-Spezialisierung)
spezialisiert das std::uses_allocator Typ-Trait
(Klassen-Template-Spezialisierung)
spezialisiert das std::uses_allocator Typ-Trait
(Klassen-Template-Spezialisierung)
spezialisiert das std::uses_allocator Typ-Trait
(Klassen-Template-Spezialisierung)
spezialisiert das std::uses_allocator Typ-Trait
(Klassen-Template-Spezialisierung)
spezialisiert das std::uses_allocator Typ-Trait
(Klassen-Template-Spezialisierung)
spezialisiert das std::uses_allocator Typ-Trait
(Klassen-Template-Spezialisierung)
spezialisiert das std::uses_allocator Typ-Trait
(Klassen-Template-Spezialisierung)
spezialisiert das std::uses_allocator Typ-Trait
(Klassen-Template-Spezialisierung)

Hinweise

Dieser Type Trait wird von std::tuple , std::scoped_allocator_adaptor und std::pmr::polymorphic_allocator verwendet. Er kann auch von benutzerdefinierten Allokatoren oder Wrapper-Typen verwendet werden, um zu bestimmen, ob das zu konstruierende Objekt oder Mitglied selbst in der Lage ist, einen Allokator zu verwenden (z.B. ein Container ist), in welchem Fall ein Allokator an seinen Konstruktor übergeben werden sollte.

Siehe auch

Ein Tag zur Auswahl von allocator-aware Konstruktoren
(Tag)
Bereitet die Argumentenliste passend zur uses-allocator Konstruktionsvariante für den gegebenen Typ vor
(Funktionstemplate)
Erstellt ein Objekt des gegebenen Typs mittels uses-allocator Konstruktion
(Funktionstemplate)
Erstellt ein Objekt des gegebenen Typs an einem spezifizierten Speicherort mittels uses-allocator Konstruktion
(Funktionstemplate)
Implementiert einen mehrstufigen Allokator für mehrstufige Container
(Klassentemplate)