Namensräume
Varianten
Aktionen

Metaprogrammierungsbibliothek (seit C++11)

Von cppreference.com
< cpp
 
 
Metaprogrammierungsbibliothek
Typmerkmale
Typkategorien
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
Typeneigenschaften
(C++11)
(C++11)
(C++14)
(C++11)(deprecated in C++26)
(C++11)(bis C++20*)
(C++11)(veraltet in C++20)
(C++11)
Typmerkmalskonstanten
Metafunktionen
(C++17)
Unterstützte Operationen
Beziehungen und Eigenschaftsabfragen
Typmodifikationen
(C++11)(C++11)(C++11)
Typentransformationen
(C++11)(veraltet in C++23)
(C++11)(veraltet in C++23)
(C++11)
(C++11)(bis C++20*)(C++17)

(C++11)
(C++11)
(C++17)
Rationale Arithmetik zur Compilezeit
Ganzzahlsequenzen zur Compilezeit
 

C++ bietet Metaprogrammierfunktionen wie Typmerkmale, rationale Arithmetik zur Compilezeit und Ganzzahlsequenzen zur Compilezeit.

Inhalt

[bearbeiten] Definitionen

Die folgenden Typen werden kollektiv als referenzierbare Typen bezeichnet

Für jeden referenzierbaren Typ T kann eine Referenz darauf erstellt werden[1].

  1. Bei Referenztypen kann dies über Referenzkollaps geschehen.

[bearbeiten] Typmerkmale

Typmerkmale definieren schnittstellenbasierte Abfragen auf Typ-Eigenschaften zur Compilezeit.

Der Versuch, eine Vorlage zu spezialisieren, die in der Kopfdatei <type_traits> definiert und auf dieser Seite aufgeführt ist, führt zu undefiniertem Verhalten, mit der Ausnahme, dass std::common_type und std::basic_common_reference(seit C++20) gemäß Beschreibung spezialisiert werden darf.

Eine in der Kopfdatei <type_traits> definierte Vorlage kann mit einem unvollständigen Typ instanziiert werden, sofern nicht anders angegeben, ungeachtet des allgemeinen Verbots, Standardbibliotheksvorlagen mit unvollständigen Typen zu instanziieren.

[bearbeiten] Basisklassen

Die meisten nicht-transformierenden Typmerkmale müssen öffentlich und eindeutig von std::integral_constant abgeleitet sein, um die Anforderungen von UnaryTypeTrait oder BinaryTypeTrait zu erfüllen.

Definiert in der Kopfdatei <type_traits>
konstantes zur Compilezeit vom angegebenen Typ mit angegebenem Wert
(Klassenvorlage) [bearbeiten]

Zwei Spezialisierungen von std::integral_constant für den Typ bool werden bereitgestellt

Definiert in der Kopfdatei <type_traits>
Typ Definition
true_type std::integral_constant<bool, true>
false_type std::integral_constant<bool, false>

[bearbeiten] Unäre Typmerkmale

Unäre Typmerkmale können verwendet werden, um boolesche Eigenschaften eines Typs zur Compilezeit abzufragen.

Alle diese Typmerkmale erfüllen UnaryTypeTrait, die Basischarakteristik jedes Typmerkmals ist entweder std::true_type oder std::false_type, abhängig davon, ob die entsprechende Bedingung erfüllt ist.

Primäre Typkategorien
Definiert in der Kopfdatei <type_traits>
(C++11)
prüft, ob ein Typ void ist
(Klassenvorlage) [bearbeiten]
(C++11)(DR*)
prüft, ob ein Typ std::nullptr_t ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein ganzzahliger Typ ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein Fließkommatyp ist
(Klassenvorlage) [bearbeiten]
(C++11)
prüft, ob ein Typ ein Arraytyp ist
(Klassenvorlage) [bearbeiten]
(C++11)
prüft, ob ein Typ ein Aufzählungstyp ist
(Klassenvorlage) [bearbeiten]
(C++11)
prüft, ob ein Typ ein Union-Typ ist
(Klassenvorlage) [bearbeiten]
(C++11)
prüft, ob ein Typ ein Nicht-Union-Klassentyp ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein Funktionstyp ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein Zeigertyp ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ eine lvalue-Referenz ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ eine rvalue-Referenz ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein Zeiger auf ein nicht-statisches Member-Objekt ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein Zeiger auf eine nicht-statische Memberfunktion ist
(Klassenvorlage) [bearbeiten]
Zusammengesetzte Typkategorien
Definiert in der Kopfdatei <type_traits>
prüft, ob ein Typ ein fundamentaler Typ ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein arithmetischer Typ ist
(Klassenvorlage) [bearbeiten]
(C++11)
prüft, ob ein Typ ein Skalartyp ist
(Klassenvorlage) [bearbeiten]
(C++11)
prüft, ob ein Typ ein Objekttyp ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein zusammengesetzter Typ ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ entweder eine lvalue-Referenz oder eine rvalue-Referenz ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein Zeiger auf eine nicht-statische Memberfunktion oder ein Objekt ist
(Klassenvorlage) [bearbeiten]
Typeneigenschaften
Definiert in der Kopfdatei <type_traits>
(C++11)
prüft, ob ein Typ const-qualifiziert ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ volatile-qualifiziert ist
(Klassenvorlage) [bearbeiten]
(C++11)(veraltet in C++26)
prüft, ob ein Typ trivial ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ trivial kopierbar ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein Standardlayout-Typ ist
(Klassenvorlage) [bearbeiten]
(C++11)(veraltet in C++20)
prüft, ob ein Typ ein Plain-Old-Data (POD)-Typ ist
(Klassenvorlage) [bearbeiten]
(C++11)(in C++17 veraltet)(in C++20 entfernt)
prüft, ob ein Typ ein Literal-Typ ist
(Klassenvorlage) [bearbeiten]
prüft, ob jedes Bit in der Objekt-Repräsentation des Typs zu seinem Wert beiträgt
(Klassenvorlage) [bearbeiten]
(C++11)
prüft, ob ein Typ ein Klassentyp (aber keine Union) ist und keine nicht-statischen Datenelemente hat
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein polymorpher Klassentyp ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein abstrakter Klassentyp ist
(Klassenvorlage) [bearbeiten]
(C++14)
prüft, ob ein Typ ein finaler Klassentyp ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein Aggregattyp ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein impliziter Lebenszeit-Typ ist
(Klassenvorlage) [bearbeiten]
(C++11)
prüft, ob ein Typ ein vorzeichenbehafteter arithmetischer Typ ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein vorzeichenloser arithmetischer Typ ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein Arraytyp mit bekannter Grenze ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein Arraytyp mit unbekannter Grenze ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ ein namensgebender Aufzählungstyp ist
(Klassenvorlage) [bearbeiten]
Unterstützte Operationen
Definiert in der Kopfdatei <type_traits>
prüft, ob ein Typ einen Konstruktor für spezifische Argumente hat
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ einen Standardkonstruktor hat
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ einen Kopierkonstruktor hat
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ aus einer rvalue-Referenz konstruiert werden kann
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ einen Zuweisungsoperator für ein bestimmtes Argument hat
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ einen Kopierzuweisungsoperator hat
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ einen Verschiebezuweisungsoperator hat
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ einen nicht-gelöschten Destruktor hat
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ einen virtuellen Destruktor hat
(Klassenvorlage) [bearbeiten]
prüft, ob Objekte eines Typs mit Objekten desselben oder eines anderen Typs vertauscht werden können
(Klassenvorlage) [bearbeiten]
prüft, ob eine Referenz in der direkten Initialisierung an ein temporäres Objekt gebunden wird
(Klassenvorlage) [bearbeiten]
prüft, ob eine Referenz in der Kopierinitialisierung an ein temporäres Objekt gebunden wird
(Klassenvorlage) [bearbeiten]

[bearbeiten] Eigenschaftsabfragen

Eigenschaftsabfrage-Merkmale können verwendet werden, um ganzzahlige Eigenschaften eines Typs zur Compilezeit abzufragen.

Alle diese Typmerkmale erfüllen UnaryTypeTrait, die Basischarakteristik jedes Typmerkmals ist std::integral_constant<std::size_t, Value>, wobei Value das Abfrageergebnis der entsprechenden Eigenschaft ist.

Definiert in der Kopfdatei <type_traits>
erhält die Ausrichtungsvoraussetzungen des Typs
(Klassenvorlage) [bearbeiten]
(C++11)
erhält die Anzahl der Dimensionen eines Arraytyps
(Klassenvorlage) [bearbeiten]
(C++11)
erhält die Größe eines Arraytyps entlang einer bestimmten Dimension
(Klassenvorlage) [bearbeiten]

[bearbeiten] Typbeziehungen

Typbeziehungsmerkmale können verwendet werden, um Beziehungen zwischen Typen zur Compilezeit abzufragen.

Alle diese Typmerkmale erfüllen BinaryTypeTrait, die Basischarakteristik jedes Typmerkmals ist entweder std::true_type oder std::false_type, abhängig davon, ob die entsprechende Bedingung erfüllt ist.

Definiert in der Kopfdatei <type_traits>
(C++11)
prüft, ob zwei Typen gleich sind
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ eine Basisklasse des anderen Typs ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ eine virtuelle Basisklasse des anderen Typs ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ in den anderen Typ konvertierbar ist
(Klassenvorlage) [bearbeiten]
prüft, ob zwei Typen Layout-kompatibel sind
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ eine Zeiger-interkonvertierbare (initiale) Basisklasse eines anderen Typs ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ mit den gegebenen Argumenttypen aufgerufen werden kann (als ob durch std::invoke)
(Klassenvorlage) [bearbeiten]

[bearbeiten] Typentransformationen

Typtransformation-Merkmale transformieren einen Typ gemäß vordefinierten Regeln in einen anderen.

Alle diese Typ-Traits erfüllen TransformationTrait.

Konst-Volatilität-Spezifizierer
Definiert in der Kopfdatei <type_traits>
entfernt const und/oder volatile Spezifizierer vom gegebenen Typ
(Klassenvorlage) [bearbeiten]
(C++11)(C++11)(C++11)
fügt const und/oder volatile Spezifizierer zum gegebenen Typ hinzu
(Klassenvorlage) [bearbeiten]
Referenzen
Definiert in der Kopfdatei <type_traits>
entfernt eine Referenz vom gegebenen Typ
(Klassenvorlage) [bearbeiten]
fügt eine lvalue- oder rvalue-Referenz zum gegebenen Typ hinzu
(Klassenvorlage) [bearbeiten]
Vorzeichen-Modifikatoren
Definiert in der Kopfdatei <type_traits>
erhält den entsprechenden vorzeichenbehafteten Typ für den gegebenen ganzzahligen Typ
(Klassenvorlage) [bearbeiten]
erhält den entsprechenden vorzeichenbehafteten Typ für den gegebenen ganzzahligen Typ
(Klassenvorlage) [bearbeiten]
Arrays
Definiert in der Kopfdatei <type_traits>
entfernt eine Ausdehnung vom gegebenen Array-Typ
(Klassenvorlage) [bearbeiten]
entfernt alle Ausdehnungen vom gegebenen Array-Typ
(Klassenvorlage) [bearbeiten]
Zeiger
Definiert in der Kopfdatei <type_traits>
entfernt einen Zeiger vom gegebenen Typ
(Klassenvorlage) [bearbeiten]
fügt einen Zeiger zum gegebenen Typ hinzu
(Klassenvorlage) [bearbeiten]
Weitere Transformationen
Definiert in der Kopfdatei <type_traits>
(seit C++11)(veraltet in C++23)
definiert den Typ, der als uninitialisierter Speicher für Typen gegebener Größe geeignet ist
(Klassenvorlage) [bearbeiten]
(seit C++11)(veraltet in C++23)
definiert den Typ, der als uninitialisierter Speicher für alle gegebenen Typen geeignet ist
(Klassenvorlage) [bearbeiten]
(C++11)
wendet Typ-Transformationen an, wie beim Übergeben eines Funktionsarguments per Wert
(Klassenvorlage) [bearbeiten]
kombiniert std::remove_cv und std::remove_reference
(Klassenvorlage) [bearbeiten]
(C++11)
entfernt bedingt eine Funktionsüberladung oder Template-Spezialisierung aus der Überladungsauflösung
(Klassenvorlage) [bearbeiten]
(C++11)
wählt basierend auf einem booleschen Wert zur Kompilierzeit einen Typ oder einen anderen
(Klassenvorlage) [bearbeiten]
ermittelt den gemeinsamen Typ einer Gruppe von Typen
(Klassenvorlage) [bearbeiten]
ermittelt den gemeinsamen Referenztyp einer Gruppe von Typen
(Klassenvorlage) [bearbeiten]
erhält den zugrundeliegenden ganzzahligen Typ für einen gegebenen Aufzählungstyp
(Klassenvorlage) [bearbeiten]
(C++11)(entfernt in C++20)(C++17)
leitet den Ergebnistyp der Invokation eines aufrufbaren Objekts mit einer Reihe von Argumenten ab
(Klassenvorlage) [bearbeiten]
(C++17)
void variadische Alias-Vorlage
(Alias-Vorlage)[bearbeiten]
gibt das Typargument unverändert zurück
(Klassenvorlage) [bearbeiten]

[bearbeiten] Logische Operationen (seit C++17)

Logische Operator-Traits wenden logische Operatoren auf andere Typ-Traits an.

Definiert in der Kopfdatei <type_traits>
variadische logische AND-Metafunktion
(Klassenvorlage) [bearbeiten]
variadische logische OR-Metafunktion
(Klassenvorlage) [bearbeiten]
(C++17)
logische NOT-Metafunktion
(Klassenvorlage) [bearbeiten]

[bearbeiten] Mitgliedsbeziehungen (seit C++20)

Definiert in der Kopfdatei <type_traits>
prüft, ob Objekte eines Typs zeigerinterkonvertierbar mit dem angegebenen Unterobjekt dieses Typs sind
(Funktionsvorlage) [bearbeiten]
prüft, ob zwei angegebene Mitglieder in der gemeinsamen anfänglichen Teilsequenz zweier angegebener Typen übereinstimmen
(Funktionsvorlage) [bearbeiten]

[bearbeiten] Compile-time rationale Arithmetik

Die Header-Datei <ratio> stellt Typen und Funktionen zur Manipulation und Speicherung von Kompilierzeit-Verhältnissen bereit.

[bearbeiten] Compile-time Ganzzahlsequenzen (seit C++14)

Definiert in der Header-Datei <utility>
implementiert eine Compile-time-Sequenz von ganzen Zahlen
(Klassenvorlage) [bearbeiten]