std::meta::annotations_of
| 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
(C++26) |
erhält die Anmerkungen, die auf die reflektierte Entität zutreffen und den angegebenen Typ haben (Funktion) |
(C++26) |
prüft, ob die Reflexion eine Anmerkung darstellt (Funktion) |
(C++26) |
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) |