std::meta::annotations_of
Определён в заголовке <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::exception, если item не представляет один из следующих элементов:
- тип
- псевдоним типа
- переменная
- функция
- параметр функции
- пространство имён
- элемент перечисления
- отношение прямого базового класса
- нестатический член данных
Пример
#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) | получает аннотации указанного типа, применимые к отражённой сущности (функция) |
|
(C++26) | проверяет, представляет ли отражение аннотацию (функция) |
|
(C++26) | получает отражение постоянного значения отражённой сущности (функция) |
|
(C++26) | определяет тип отражённой сущности (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/annotations_of