Namensräume
Varianten
Aktionen

Erweiterungen für Reflexion

Von cppreference.com
 
 
 
Erweiterungen für Reflexion
Konzepte
Metaobjekt-Operationen
Variable
FunctionParameter
Callable
Variable und Callable
Namespace und Callable
ParenthesizedExpression
FunctionCallExpression
FunctionalConversion
Variable und Function
 

Die C++ Extensions for Reflection, ISO/IEC TS 23619:2021, spezifiziert Modifikationen an der Kernsprache und definiert neue Komponenten für die C++-Standardbibliothek, die auf dieser Seite aufgeführt sind.

Die Reflection TS basiert auf dem C++20-Standard (außer dass die Definition von Concepts im Stil von Concepts TS spezifiziert ist).

Inhalt

[edit] Kernsprachänderungen

[edit] reflexpr-Spezifizierer

Ein reflexpr-Spezifizierer hat die Form reflexpr ( reflexpr-Operand ) und spezifiziert einen Metaobjekttyp (siehe unten).

reflexpr-Operand kann eine der folgenden sein:

:: (1)
type-id (2)
nested-name-specifier(optional) namespace-name (3)
id-expression (4)
( expression ) (5)
function-call-expression (6)
functional-type-conv-expression (7)

wobei function-call-expression ist

postfix-expression ( expression-list(optional) )

und functional-type-conv-expression sind folgende Arten von Ausdrücken, die eine explizite Umwandlung durchführen:

simple-type-specifier ( expression-list(optional) ) (1)
typename-specifier ( expression-list(optional) ) (2)
simple-type-specifier braced-init-list (3)
typename-specifier braced-init-list (4)

Der Operand für den reflexpr-Spezifizierer muss ein Typ, ein Namespace, ein Enumerator, eine Variable, ein Datenmember, ein Funktionsparameter, eine erfasste Entität, ein function-call-expression oder ein functional-type-conv-expression sowie ein klammerausdruck sein. reflexpr(::) reflektiert den globalen Namespace.

Für einen reflexpr-Operand der Form ( expression ) muss der expression ein (möglicherweise mehrfach geklammerter) function-call-expression oder functional-type-conv-expression sein.

Wenn ein ungeklammerter Operand sowohl als type-id als auch als functional-type-conv-expression behandelt werden kann, wird er als type-id behandelt. Klammern können zur Disambiguierung zwischen einem funktionsartigen Cast und einem type-id verwendet werden. Wenn beispielsweise ein Klassentyp X mit einem Standardkonstruktor gegeben ist, reflektiert reflexpr(X()) den Funktionstyp X(), und reflexpr((X())) reflektiert den Ausdruck X().

Wenn der Operand sowohl einen Alias als auch einen Klassennamen bezeichnet, reflektiert der durch den reflexpr-Spezifizierer dargestellte Typ den Alias und erfüllt reflect::Alias.

Wenn der Operand einen Namen bezeichnet, dessen Deklaration in einem Block-Scope eingeschlossen ist und die benannte Entität weder erfasst noch ein Funktionsparameter ist, ist das Programm ill-formed.

[edit] Metaobjekttypen

Ein *Metaobjekttyp* ist ein unbenannter, unvollständiger Klassentyp im Namespace-Scope. Ein Typ erfüllt das Concept reflect::Object genau dann, wenn er ein Metaobjekttyp ist. Metaobjekttypen können weitere Concepts erfüllen, abhängig vom Operanden von reflexpr.

Es ist nicht spezifiziert, ob die wiederholte Anwendung von reflexpr auf denselben Operanden denselben Typ oder einen anderen Typ ergibt. Wenn ein Metaobjekttyp einen unvollständigen Klassentyp reflektiert, können bestimmte Typtransformationen nicht angewendet werden.

Ein Metaobjekttyp ermöglicht die Inspektion einiger Eigenschaften des Operanden von reflexpr durch Typmerkmale oder Typtransformationen daran.

[edit] Überladungsauflösung

Wenn der postfix-expression des function-call-expression vom Klassentyp ist, d.h. e im function-call-expression e(args) vom Klassentyp ist, dann darf die benutzerdefinierte Konvertierungsfunktion des Typs des postfix-expression (e) nicht verwendet werden.

Wenn postfix-expression nicht vom Klassentyp ist, muss er eine Funktion benennen, die das eindeutige Ergebnis der Überladungsauflösung ist.

struct Functor
{
    void operator()(int) const;
 
    using fptr_t = void(*)(std::nullptr_t);
    operator fptr_t() const;
};
 
using Meta0 = reflexpr(Functor{}(0));          // OK
// using Meta1 = reflexpr(Functor{}(nullptr)); // error: conversion function used

[edit] Reflexionsbezogen

Ein *Alias* ist ein Name, der durch eine typedef-Deklaration, eine Alias-Deklaration oder eine using-Deklaration eingeführt wird.

Eine Entität oder ein Alias B ist *reflexionsbezogen* zu einer Entität oder einem Alias A, wenn

  1. A und B dieselbe Entität oder dasselbe Alias sind,
  2. A eine Variable oder ein Enumerator ist und B der Typ von A ist,
  3. A eine Aufzählung ist und B der zugrunde liegende Typ von A ist,
  4. A eine Klasse ist und B ein Member oder eine Basisklasse von A ist,
  5. A ein nicht-generischer Alias ist, der die Entität B bezeichnet,
  6. A nicht der globale Namespace ist und B eine einschließende Klasse oder ein einschließender Namespace von A ist,
  7. A der klammerausdruck ( B ) ist,
  8. A eine Lambda-Erfassung des Closure-Typs B ist,
  9. A der Closure-Typ der Lambda-Erfassung B ist,
  10. B der durch den functional-type-conv-expression A spezifizierte Typ ist,
  11. B die durch Überladungsauflösung für einen function-call-expression A ausgewählte Funktion ist, oder
  12. B reflexionsbezogen zu einer Entität oder einem Alias X ist und X reflexionsbezogen zu A ist.
  13. Die Reflexionsbeziehungsbeziehung ist reflexiv und transitiv, aber nicht symmetrisch.

Informell ausgedrückt bedeutet der Fall, dass B reflexionsbezogen zu A ist, dass B an der Deklaration oder Definition von A beteiligt ist.

Null oder mehr aufeinanderfolgende Anwendungen von Typtransformationen, die Metaobjekttypen ergeben, auf den durch einen reflexpr-Spezifizierer bezeichneten Typ ermöglichen die Inspektion von Entitäten und Aliassen, die reflexionsbezogen zum Operanden sind; ein solcher Metaobjekttyp soll die jeweilige reflexionsbezogene Entität oder den jeweiligen Alias reflektieren.

[edit] Sonstiges

struct X;
struct B
{
    using X = ::X;
    typedef X Y;
};
struct D : B
{
    using B::Y;
};
// ::X, but not B::X or B::Y is reflection-related to D::Y

Ein als reflexpr-Operand verwendeter Ausdruck ist ein unevaluierter Ausdruck und potenziell konstanten-ausgewertet.

  • Für die Bestimmung von Variablen, die in einem Lambda-Ausdruck mit einem Capture-Default erfasst werden, gilt ein reflexpr-Operand nicht als unevaluierter Operand.
  • Eine Funktion oder Variable mit statischer Speicherdauer, die durch den Metaobjekttyp T reflektiert wird, wird durch die Spezialisierung std::experimental::reflect::get_pointer<T> odr-used, als ob die Adresse eines id-Expressions genommen würde, der die Funktion oder Variable benennt.
  • Es kann mehr als eine Definition eines Metaobjekttyps geben, solange alle Operationen auf diesem Typ dieselben konstanten Auswertungsergebnisse liefern.
  • Ein Typ ist abhängig, wenn er durch einen reflexpr-Spezifizierer bezeichnet wird und der Operand
  • ein typendabhängiger Ausdruck oder ein (möglicherweise geklammerter) functional-type-conv-expression mit mindestens einem typenabhängigen unmittelbaren Unterausdruck ist, oder

reflexpr

[edit] Vordefinierte Feature-Testmakros

__cpp_reflection

(Reflexion TS)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
[edit] Bibliotheksunterstützung
(Makro-Konstante)

[edit] Concepts

Definiert in Header <experimental/reflect>

Definiert im Namespace std::experimental::reflect
Definiert im Inline-Namespace std::experimental::reflect::v1
spezifiziert, dass ein Typ ein Metaobjekttyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
(concept)
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Template-Parameter-Scope reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp eine Entität oder einen Alias mit einem zugehörigen (möglicherweise leeren) Namen reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Typ-Alias, einen Namespace-Alias oder einen durch eine using-Deklaration eingeführten Alias reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp eine member-declaration einer Klasse reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Enumerator reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp eine Variable oder einen Datenmember reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp RecordMember, Enumerator oder Variable erfüllt oder einen anderen Namespace als den globalen Namespace reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp eine Entität mit einem Typ reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Namespace reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp den globalen Namespace reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen nicht-union-Klassentyp reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Aufzählungstyp reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Klassentyp reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Namespace, eine Klasse, eine Aufzählung, eine Funktion, einen Closure-Typ oder einen Template-Parameter-Scope reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Typ reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Enumerator oder eine constexpr-Variable reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp eine direkte Basisklasse reflektiert, die von get_base_classes bezogen wird
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Funktionsparameter reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp eine Funktion (einschließlich Konstruktoren und Destruktoren) reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Ausdruck reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen geklammerten Ausdruck reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen function-call-expression reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen functional-type-conv-expression reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp eine Funktion (ohne Konstruktoren und Destruktoren) reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp eine Member-Funktion (ohne Konstruktoren und Destruktoren) reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp eine spezielle Member-Funktion reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Konstruktor reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp einen Destruktor reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp eine Operatorfunktion oder eine Konvertierungsfunktion reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp eine Konvertierungsfunktion reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp den Closure-Typ eines nicht-generischen Lambdas reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
spezifiziert, dass ein Metaobjekttyp eine Lambda-Erfassung reflektiert
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
[edit] Metaobjekt-Operationen
spezifiziert, dass ein Metaobjekttyp ein Metaobjektsequenztyp ist

Object-Operationen

Definiert im Namespace std::experimental::reflect
Definiert im Inline-Namespace std::experimental::reflect::v1
spezifiziert, dass ein Typ ein Metaobjekttyp ist
prüft, ob zwei Metaobjekttypen dieselbe Entität oder denselben Alias reflektieren
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält die vermutete Zeilennummer der Deklaration der reflektierten Entität oder des reflektierten Alias
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält die implementierungsabhängige Spaltennummer der Deklaration der reflektierten Entität oder des reflektierten Alias
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält den vermuteten Dateinamen der Deklaration der reflektierten Entität oder des reflektierten Alias
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
ObjectSequence-Operationen
(Klassentemplate)
erhält die Größe einer Metaobjektsequenz
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält den Metaobjekttyp mit dem angegebenen Index in einer Sequenz
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
wendet ein Template auf die Metaobjektsequenz an
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Named-Operationen
(Klassentemplate)
prüft, ob die reflektierte Entität oder der reflektierte Alias unbenannt ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält den unqualified Namen der reflektierten Entität oder des reflektierten Alias
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält den implementierungsabhängigen Anzeigenamen der reflektierten Entität oder des reflektierten Alias
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Alias-Operationen
(Klassentemplate)
erhält den Metaobjekttyp, der die zugehörige Entität des reflektierten Alias reflektiert
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Type-Operationen
(Klassentemplate)
erhält den Metaobjekttyp, der den Typ der reflektierten Entität oder des reflektierten Alias reflektiert
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält den Typ der reflektierten Entität oder des reflektierten Alias
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob der Metaobjekttyp einen Aufzählungstyp reflektiert
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob der Metaobjekttyp einen Union-Typ reflektiert
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob der Metaobjekttyp einen nicht-union-Klassentyp reflektiert, dessen Deklaration class oder struct verwendet
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
ScopeMember-Operationen
(Klassentemplate)
erhält den Metaobjekttyp, der den Scope der reflektierten Entität oder des reflektierten Alias reflektiert
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Base-Operationen
(Klassentemplate)
get_class
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
RecordMember und Base-Operationen
(Klassentemplate)
prüft, ob das reflektierte Member oder die reflektierte Basisklasse public ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob das reflektierte Member oder die reflektierte Basisklasse protected ist
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob das reflektierte Member oder die reflektierte Basisklasse private ist
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Record-Operationen
(Klassentemplate)
erhält einen Metaobjektsequenztyp, dessen Elemente public, zugängliche oder alle Datenmember der reflektierten Klasse reflektieren
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält einen Metaobjektsequenztyp, dessen Elemente public, zugängliche oder alle Memberfunktionen der reflektierten Klasse reflektieren
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält einen Metaobjektsequenztyp, dessen Elemente alle Konstruktoren der reflektierten Klasse reflektieren
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält einen Metaobjektsequenztyp, dessen Elemente alle Operatorfunktionen und Konvertierungsfunktionen, die in der reflektierten Klasse deklariert sind, reflektieren
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält den Metaobjekttyp, der den Destruktor der reflektierten Klasse reflektiert
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält einen Metaobjektsequenztyp, dessen Elemente public, zugängliche oder alle verschachtelten Typen oder Member-Typedefs der reflektierten Klasse reflektieren
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält einen Metaobjektsequenztyp, dessen Elemente public, zugängliche oder alle Basisklassen der reflektierten Klasse reflektieren
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Enum-Operationen
(Klassentemplate)
prüft, ob die reflektierte Aufzählung nach Scopes getrennt ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält einen Metaobjektsequenztyp, dessen Elemente die Enumeratoren der reflektierten Aufzählung reflektieren
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
erhält den Metaobjekttyp, der den zugrunde liegenden Typ der reflektierten Aufzählung reflektiert
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Variable-Operationen
(Klassentemplate)
erhält den Wert der reflektierten Variablen, der ein konstanter Ausdruck ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob die Variable mit thread_local deklariert wurde
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
FunctionParameter-Operationen
(Klassentemplate)
prüft, ob der reflektierte Parameter ein Standardargument hat
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Callable-Operationen
(Klassentemplate)
erhält einen Metaobjektsequenztyp, dessen Elemente die Parameter der reflektierten Funktion reflektieren
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob die Parameterliste der reflektierten Funktion einen Ellipsenparameter enthält
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob die reflektierte Funktion nicht werfend ist
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob die reflektierte Funktion gelöscht ist
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Variable und Callable-Operationen
(Klassentemplate)
prüft, ob die reflektierte Variable oder Funktion constexpr ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Namespace und Callable-Operationen
(Klassentemplate)
prüft, ob der reflektierte Namespace oder die reflektierte Funktion inline ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
ParenthesizedExpression-Operationen
(Klassentemplate)
erhält den Metaobjekttyp, der den ungeklärten Ausdruck des reflektierten geklammerten Ausdrucks reflektiert
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
FunctionCallExpression-Operationen
(Klassentemplate)
erhält den Metaobjekttyp, der die Funktion im reflektierten function-call-expression reflektiert
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
FunctionalTypeConversion-Operationen
(Klassentemplate)
erhält den Metaobjekttyp, der den Konstruktor im reflektierten functional-type-conv-expression reflektiert
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Variable und Function-Operationen
(Klassentemplate)
erhält die Adresse der reflektierten Variablen oder Funktion, oder den Zeiger-auf-Member-Wert für das reflektierte nicht-statische Member
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
MemberFunction-Operationen
(Klassentemplate)
prüft, ob die reflektierte Member-Funktion mit const, volatile, & oder && Qualifizierer deklariert wurde
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob die reflektierte Member-Funktion eine Member-Funktion der Basisklasse überschreibt
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Record und MemberFunction-Operationen
(Klassentemplate)
prüft, ob die reflektierte Klasse oder Member-Funktion mit final markiert ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Variable und MemberFunction-Operationen
(Klassentemplate)
prüft, ob die reflektierte Variable eine statische Speicherdauer hat oder die reflektierte Member-Funktion statisch ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
SpecialMemberFunction-Operationen
(Klassentemplate)
prüft, ob die reflektierte spezielle Member-Funktion implizit deklariert wurde
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob die reflektierte spezielle Member-Funktion in ihrer ersten Deklaration defaultet wurde
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Constructor und ConversionOperator-Operationen
(Klassentemplate)
prüft, ob der reflektierte Konstruktor oder die reflektierte Konvertierungsfunktion mit explicit deklariert wurde
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
MemberFunction und Destructor-Operationen
(Klassentemplate)
prüft, ob die reflektierte Member-Funktion virtuell ist
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob die reflektierte Member-Funktion rein virtuell ist
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Lambda-Operationen
(Klassentemplate)
erhält einen Metaobjektsequenztyp, dessen Elemente die Erfassungen des reflektierten Closure-Typs reflektieren
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob der Capture-Default des Lambda-Ausdrucks des reflektierten Closure-Typs = bzw. & ist
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob der operator() des reflektierten Closure-Typs mit const deklariert wurde
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
LambdaCapture-Operationen
(Klassentemplate)
is_explictly_captured
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
prüft, ob die reflektierte Lambda-Erfassung eine Init-Erfassung ist
(Klassentemplate)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
[edit] Bibliotheks-Feature-Testmakros
(Klassentemplate)

__cpp_lib_reflection

Definiert im Namespace std::experimental::reflect
(Reflexion TS)
Ein Wert von mindestens 201902 zeigt an, dass die Reflection TS unterstützt wird.
Ein Wert von mindestens 201902 zeigt an, dass die Bibliotheksunterstützung der Reflection TS unterstützt wird.
(Makro-Konstante)

[edit] Erfüllung von Concepts

Die folgende Tabelle zeigt, ob ein Metaobjekttyp, der einen Operanden reflektiert, die von der Reflection TS eingeführten Concepts erfüllt.

Kategorie reflexpr-Operanden Erfüllte Concepts
Typ class-name, der eine union bezeichnet reflect::Union
class-name, der einen Closure-Typ bezeichnet reflect::Lambda
class-name, der eine Nicht-Union-Klasse bezeichnet reflect::Record
enum-name reflect::Enum
template type-parameter reflect::Type, reflect::Alias
decltype-Spezifizierer reflect::Type, reflect::Alias
type-name, eingeführt durch eine using-Deklaration reflect::Type, reflect::Alias, reflect::ScopedMember
jeder andere typedef-name reflect::Type, reflect::Alias
jeder andere type-id reflect::Type
Namespace namespace-alias reflect::Namespace, reflect::Alias
der globale Namespace reflect::GlobalScope
jeder andere Namespace reflect::Namespace
Ausdruck der Name eines Datenmembers reflect::Variable
der Name einer Variablen reflect::Variable
der Name eines Enumerators reflect::Enumerator
der Name eines Funktionsparameters reflect::FunctionParameter
der Name einer erfassten Entität reflect::LambdaCapture
geklammerter Ausdruck reflect::ParenthesizedExpression
function-call-expression reflect::FunctionCallExpression
functional-type-conv-expression reflect::FunctionalTypeConversion

Wenn der Operand in Form eines id-Expressions ein konstanter Ausdruck ist, erfüllt der durch den reflexpr-Spezifizierer spezifizierte Typ auch reflect::Constant.

Wenn der reflexpr-Operand ein Klassenmember bezeichnet, erfüllt der durch den reflexpr-Spezifizierer dargestellte Typ auch reflect::RecordMember.

[edit] Siehe auch

enthält Informationen über bestimmte Typen, die Klasse, die vom typeid-Operator zurückgegeben wird
(Klasse) [bearbeiten]
Laufzeit-Typinformationsdienstprogramme[edit]