Namespaces
Variants

std::meta::annotations_of

De es.cppreference.net
< cpp | meta
 
 
 
Biblioteca de reflexión
 
Tipos y consultas de reflexión
Consultas de reflexión
Consultas de diseño de reflexión
Propiedades de tipo
Consultas de propiedades de tipo
 
Definido en el encabezado <meta>
consteval std::vector<std::meta::info> annotations_of( std::meta::info item );
(desde C++26)

Devuelve un vector que contiene reflexiones de las anotaciones que se aplican a la entidad representada por item.

Si item representa un parámetro de función P de una función F, sea S el conjunto de declaraciones, ignorando cualquier instanciación explícita, que son alcanzables desde un punto en el contexto de evaluación y que declaran ya sea F o una función plantilla de la cual F es una especialización, el resultado contiene reflexiones de todas las anotaciones que se aplican a P en cada declaración en S.

Si item representa una relación de clase base directa, el resultado contiene reflexiones de todas las anotaciones que se aplican al especificador de base correspondiente.

Para dos reflexiones cualesquiera R1 y R2 en el vector devuelto, si la anotación representada por R1 precede a la anotación representada por R2, entonces R1 está antes que R2 en el vector. Si R1 y R2 representan anotaciones de la misma unidad de traducción T, cualquier elemento entre R1 y R2 en el vector devuelto representa anotaciones de T. El orden no está especificado en caso contrario.

Parámetros

item - un valor de reflexión

Valor de retorno

un vector que contiene reflexiones de las anotaciones que se aplican a lo que item representa.

Excepciones

Lanza std::meta::exception a menos que item represente uno de los siguientes:

  • tipo
  • alias de tipo
  • variable
  • función
  • parámetro de función
  • espacio de nombres
  • enumerador
  • relación de clase base directa
  • miembro de datos no estático

Ejemplo

#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):]);
    }
}

Salida:

3.14
42

Véase también

obtiene las anotaciones que se aplican a la entidad reflejada y tienen el tipo especificado
(función)
comprueba si la reflexión representa una anotación
(función)
obtiene una reflexión del valor constante de la entidad reflejada
(función)
(C++26)
obtiene una reflexión del tipo de la entidad reflejada
(función)