Namespaces
Variants

std::meta::annotations_of

Von de.cppreference.net
< cpp | meta
 
 
 
Reflexionsbibliothek
 
Reflexionstypen und -abfragen
Reflexionsabfragen
Reflexionslayoutabfragen
Typeigenschaften
Typeigenschaftsabfragen
 
Definiert in Header <meta>
consteval std::vector<std::meta::info> annotations_of( std::meta::info item );
(seit C++26)

Gibt einen Vektor zurück, der Reflexionen von Anmerkungen enthält, die auf die durch item dargestellte Entität zutreffen.

Wenn item einen Funktionsparameter P einer Funktion F darstellt, dann sei S die Menge der Deklarationen, unter Vernachlässigung expliziter Instantiierungen, die von einem Punkt im Evaluierungskontext aus erreichbar sind und die entweder F oder eine templatisierte Funktion, von der F eine Spezialisierung ist, deklarieren, das Ergebnis enthält Reflexionen aller Anmerkungen, die auf P in jeder Deklaration in S zutreffen.

Wenn item eine direkte Basisklassenbeziehung darstellt, enthält das Ergebnis Reflexionen aller Anmerkungen, die auf den entsprechenden Basisklassenspezifizierer zutreffen.

Für zwei beliebige Reflexionen R1 und R2 im zurückgegebenen Vektor: Wenn die durch R1 dargestellte Anmerkung der durch R2 dargestellten Anmerkung vorausgeht, dann steht R1 vor R2 im Vektor. Wenn R1 und R2 Anmerkungen aus derselben Übersetzungseinheit T darstellen, stellen alle Elemente zwischen R1 und R2 im zurückgegebenen Vektor Anmerkungen aus T dar. Die Reihenfolge ist ansonsten unspezifiziert.

Parameter

item - ein Reflexionswert

Rückgabewert

ein Vektor, der Reflexionen von Anmerkungen enthält, die auf das zutreffen, was item darstellt.

Ausnahmen

Wirft std::meta::exception, es sei denn, item stellt einen der folgenden dar:

  • Typ
  • Typ-Alias
  • Variable
  • Funktion
  • Funktionsparameter
  • Namensraum
  • Enumerator
  • direkte Basisklassenbeziehung
  • nicht-statisches Datenelement

Beispiel

#include <meta>
#include <print>

template<class T>
struct [[=42]] D {};

constexpr std::meta::info a1 = std::meta::annotations_of(^^D<int>)[0];
constexpr std::meta::info a2 = std::meta::annotations_of(^^D<char>)[0];
static_assert(a1 != a2);
static_assert(std::meta::constant_of(a1) == std::meta::constant_of(a2));

[[=1]] int x, y;
static_assert(std::meta::annotations_of(^^x)[0] == std::meta::annotations_of(^^y)[0]);

int main()
{
    [[=3.14]] typedef int var;
    typedef int var [[=42]];

    static constexpr auto annotations =
        std::define_static_array(std::meta::annotations_of(^^var));
    template for (constexpr auto ann : annotations) {
        std::println("{}", [:std::meta::constant_of(ann):]);
    }
}

Ausgabe:

3.14
42

Siehe auch

erhält die Anmerkungen, die auf die reflektierte Entität zutreffen und den angegebenen Typ haben
(Funktion)
prüft, ob die Reflexion eine Anmerkung
darstellt (Funktion)
erhält eine Reflexion des konstanten Werts der reflektierten Entität
(Funktion)
(C++26)
erhält eine Reflexion des Typs der reflektierten Entität
(Funktion)