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::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) |
получает аннотации, которые применяются к отражённому объекту и имеют указанный тип (функция) |
(C++26) |
проверяет, представляет ли отражение аннотацию (функция) |
(C++26) |
получает отражение константного значения отражённого объекта (функция) |
(C++26) |
получает отражение типа отражённого объекта (функция) |