std::meta::annotations_of
| 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
(C++26) |
obtiene las anotaciones que se aplican a la entidad reflejada y tienen el tipo especificado (función) |
(C++26) |
comprueba si la reflexión representa una anotación (función) |
(C++26) |
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) |