std::meta::annotations_of
| Défini dans l'en-tête <meta>
|
||
consteval std::vector<std::meta::info> annotations_of( std::meta::info item );
|
(depuis C++26) | |
Retourne un vecteur contenant les réflexions des annotations qui s'appliquent à l'entité représentée par item.
Si item représente un paramètre de fonction P d'une fonction F, alors soit S l'ensemble des déclarations, en ignorant toutes les instanciations explicites, qui sont accessibles depuis un point du contexte d'évaluation et qui déclarent soit F soit une fonction template dont F est une spécialisation, le résultat contient les réflexions de toutes les annotations qui s'appliquent à P dans chaque déclaration de S.
Si item représente une relation de classe de base directe, le résultat contient les réflexions de toutes les annotations qui s'appliquent au base-specifier correspondant.
Pour deux réflexions quelconques R1 et R2 dans le vecteur retourné, si l'annotation représentée par R1 précède l'annotation représentée par R2, alors R1 est avant R2 dans le vecteur. Si R1 et R2 représentent des annotations de la même unité de traduction T, tous les éléments entre R1 et R2 dans le vecteur retourné représentent des annotations de T. L'ordre n'est pas spécifié autrement.
Paramètres
| item | - | une valeur de réflexion |
Valeur de retour
un vecteur contenant les réflexions des annotations qui s'appliquent à ce que item représente.
Exceptions
Lève std::meta::exception sauf si item représente l'un des éléments suivants :
- type
- alias de type
- variable
- fonction
- paramètre de fonction
- espace de noms
- énumérateur
- relation de classe de base directe
- membre de donnée non statique
Exemple
#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):]);
}
}
Sortie :
3.14
42
Voir aussi
(C++26) |
obtient les annotations qui s'appliquent à l'entité reflétée et qui ont le type spécifié (fonction) |
(C++26) |
vérifie si la réflexion représente une annotation (fonction) |
(C++26) |
obtient une réflexion de la valeur constante de l'entité reflétée (fonction) |
(C++26) |
obtient une réflexion du type de l'entité reflétée (fonction) |