Namespaces
Variants

std::meta::annotations_of

С ru.cppreference.net
< cpp | meta
 
 
 
Библиотека отражения
Запросы доступности членов
Идентификация области видимости
Запросы членов отражения
Отражение аннотаций
Извлечение значений
Подстановка отражения
Отражение результата выражения
Генерация определения класса

Первичные категории типов
Составные категории типов
Свойства типов ➜
Отношения типов
 
Типы и запросы отражения
Запросы отражения
Запросы компоновки отражения
Свойства типов
Запросы свойств типов
 
Определено в заголовочном файле <meta>
consteval std::vector<std::meta::info> annotations_of( std::meta::info item );
(начиная с C++26)

Возвращает вектор, содержащий отражения аннотаций, которые применяются к сущности, представленной item.

Если item представляет Pпараметр функцииF функции S, то пусть F будет множество объявлений, игнорируя любые явные конкретизации, которые достижимы из точки в контексте вычисления и которые объявляют либо F, либо шаблонную функцию, специализацией которой является P, результат содержит отражения всех аннотаций, которые применяются к S в каждом объявлении из

. itemЕсли представляет отношение прямого базового класса, результат содержит отражения всех аннотаций, которые применяются к соответствующему базовому спецификатору

. R1Для любых двух отражений R2 и R1 в возвращаемом векторе, если аннотация, представленная R2, предшествует аннотации, представленной R1, то R2 находится перед R1 в векторе. Если R2 и T представляют аннотации из одной и той же единицы трансляции R1, любые элементы между R2 и T в возвращаемом векторе представляют аннотации из

См. также

Параметры item -

значение отражения

Возвращаемое значениеitemвектор, содержащий отражения аннотаций, которые применяются к тому, что представляет

.

ИсключенияВыбрасывает std::meta::exceptionitem, если

  • не представляет одно из следующего:
  • тип
  • псевдоним типа
  • переменная
  • функция
  • параметр функции
  • пространство имён
  • перечислитель
  • отношение прямого базового класса

нестатический элемент данных

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

Вывод:

3.14
42

См. также

получает аннотации, которые применяются к отражённому объекту и имеют указанный тип
(функция)
проверяет, представляет ли отражение аннотацию
(функция)
получает отражение константного значения отражённого объекта
(функция)
(C++26)
получает отражение типа отражённого объекта
(функция)