std:: uses_allocator
|
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
Tkeinen kompatiblen Allokator verwendet ( std :: uses_allocator_v < T, Alloc > ist false ), wirdallocignoriert. - Andernfalls ist std :: uses_allocator_v < T, Alloc > true , und
-
-
Falls
Tdie Leading-Allocator-Konvention verwendet (aufrufbar als T ( std:: allocator_arg , alloc, args... ) ), dann verwendet die Uses-Allocator-Konstruktion diese Form. -
Falls
Tdie 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).
-
Falls
-
Als Sonderfall wird
std::pair
als uses-allocator-Typ behandelt, obwohl
std::uses_allocatorfür Paare false ist (im Gegensatz zu z.B. std::tuple ): siehe pairspezifische Überladungen von std::pmr::polymorphic_allocator::construct und std::scoped_allocator_adaptor::construct (bis C++20) std::uses_allocator_construction_args (seit C++20) .
|
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:
-
Tverfügt über einen Konstruktor, der std::allocator_arg_t als ersten Parameter undAllocals zweiten Parameter akzeptiert. -
Tverfügt über einen Konstruktor, derAllocals 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:
|
(C++11)
|
spezialisiert das
std::uses_allocator
Typ-Trait
(Klassen-Template-Spezialisierung) |
|
(C++11)
|
spezialisiert das
std::uses_allocator
Typ-Trait
(Klassen-Template-Spezialisierung) |
|
spezialisiert das
std::uses_allocator
Typ-Trait
(Klassen-Template-Spezialisierung) |
|
|
(C++11)
|
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) |
|
|
(C++11)
(bis C++17)
|
spezialisiert das
std::uses_allocator
Typ-Trait
(Klassen-Template-Spezialisierung) |
|
spezialisiert das
std::uses_allocator
Typ-Trait
(Klassen-Template-Spezialisierung) |
|
|
(C++11)
(bis C++17)
|
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
|
(C++11)
|
Ein Tag zur Auswahl von allocator-aware Konstruktoren
(Tag) |
|
(C++20)
|
Bereitet die Argumentenliste passend zur uses-allocator Konstruktionsvariante für den gegebenen Typ vor
(Funktionstemplate) |
|
(C++20)
|
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) |
|
|
(C++11)
|
Implementiert einen mehrstufigen Allokator für mehrstufige Container
(Klassentemplate) |