Namespaces
Variants

Библиотека отражений (начиная с C++26)

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

Первичные категории типов
Составные категории типов
Свойства типов ➜
Отношения типов
 
Типы и запросы отражения
Запросы отражения
Запросы компоновки отражения
Свойства типов
Запросы свойств типов
 

Средства, определённые в этом разделе, поддерживают рефлексивное программирование, позволяя программам на C++ как наблюдать структуру самой программы, так и генерировать код, зависящий от этих наблюдений.

Основной язык

Библиотека отражений работает совместно с двумя ключевыми возможностями языка:

  • оператор отражения ^^
  • спецификаторы вставки [: ... :]

Библиотека отражений

Template:cpp/meta/dsc is templateTemplate:cpp/meta/dsc is function templateTemplate:cpp/meta/dsc is variable templateTemplate:cpp/meta/dsc is class templateTemplate:cpp/meta/dsc is alias templateTemplate:cpp/meta/dsc is conversion function templateTemplate:cpp/meta/dsc is operator function templateTemplate:cpp/meta/dsc is literal operator templateTemplate:cpp/meta/dsc is constructor templateTemplate:cpp/meta/dsc is conceptTemplate:cpp/meta/dsc member offsetTemplate:cpp/meta/dsc data member optionsTemplate:cpp/meta/dsc is void typeTemplate:cpp/meta/dsc is null pointer typeTemplate:cpp/meta/dsc is integral typeTemplate:cpp/meta/dsc is floating point typeTemplate:cpp/meta/dsc is array typeTemplate:cpp/meta/dsc is pointer typeTemplate:cpp/meta/dsc is lvalue reference typeTemplate:cpp/meta/dsc is rvalue reference typeTemplate:cpp/meta/dsc is member object pointer typeTemplate:cpp/meta/dsc is member function pointer typeTemplate:cpp/meta/dsc is enum typeTemplate:cpp/meta/dsc is union typeTemplate:cpp/meta/dsc is class typeTemplate:cpp/meta/dsc is function typeTemplate:cpp/meta/dsc is reflection typeTemplate:cpp/meta/dsc is reference typeTemplate:cpp/meta/dsc is arithmetic typeTemplate:cpp/meta/dsc is fundamental typeTemplate:cpp/meta/dsc is object typeTemplate:cpp/meta/dsc is scalar typeTemplate:cpp/meta/dsc is compound typeTemplate:cpp/meta/dsc is member pointer typeTemplate:cpp/meta/dsc is const typeTemplate:cpp/meta/dsc is volatile typeTemplate:cpp/meta/dsc is trivially copyable typeTemplate:cpp/meta/dsc is standard layout typeTemplate:cpp/meta/dsc is empty typeTemplate:cpp/meta/dsc is polymorphic typeTemplate:cpp/meta/dsc is abstract typeTemplate:cpp/meta/dsc is final typeTemplate:cpp/meta/dsc is aggregate typeTemplate:cpp/meta/dsc is structural typeTemplate:cpp/meta/dsc is signed typeTemplate:cpp/meta/dsc is unsigned typeTemplate:cpp/meta/dsc is bounded array typeTemplate:cpp/meta/dsc is unbounded array typeTemplate:cpp/meta/dsc is scoped enum typeTemplate:cpp/meta/dsc is constructible typeTemplate:cpp/meta/dsc is default constructible typeTemplate:cpp/meta/dsc is copy constructible typeTemplate:cpp/meta/dsc is move constructible typeTemplate:cpp/meta/dsc is assignable typeTemplate:cpp/meta/dsc is copy assignable typeTemplate:cpp/meta/dsc is move assignable typeTemplate:cpp/meta/dsc is swappable with typeTemplate:cpp/meta/dsc is swappable typeTemplate:cpp/meta/dsc is destructible typeTemplate:cpp/meta/dsc is trivially constructible typeTemplate:cpp/meta/dsc is trivially default constructible typeTemplate:cpp/meta/dsc is trivially copy constructible typeTemplate:cpp/meta/dsc is trivially move constructible typeTemplate:cpp/meta/dsc is trivially assignable typeTemplate:cpp/meta/dsc is trivially copy assignable typeTemplate:cpp/meta/dsc is trivially move assignable typeTemplate:cpp/meta/dsc is trivially destructible typeTemplate:cpp/meta/dsc is nothrow constructible typeTemplate:cpp/meta/dsc is nothrow default constructible typeTemplate:cpp/meta/dsc is nothrow copy constructible typeTemplate:cpp/meta/dsc is nothrow move constructible typeTemplate:cpp/meta/dsc is nothrow assignable typeTemplate:cpp/meta/dsc is nothrow copy assignable typeTemplate:cpp/meta/dsc is nothrow move assignable typeTemplate:cpp/meta/dsc is nothrow swappable with typeTemplate:cpp/meta/dsc is nothrow swappable typeTemplate:cpp/meta/dsc is nothrow destructible typeTemplate:cpp/meta/dsc is implicit lifetime typeTemplate:cpp/meta/dsc has virtual destructorTemplate:cpp/meta/dsc has unique object representationsTemplate:cpp/meta/dsc reference constructs from temporaryTemplate:cpp/meta/dsc reference converts from temporaryTemplate:cpp/meta/dsc rankTemplate:cpp/meta/dsc extentTemplate:cpp/meta/dsc is same typeTemplate:cpp/meta/dsc is base of typeTemplate:cpp/meta/dsc is virtual base of typeTemplate:cpp/meta/dsc is convertible typeTemplate:cpp/meta/dsc is nothrow convertible typeTemplate:cpp/meta/dsc is layout compatible typeTemplate:cpp/meta/dsc is pointer interconvertible base of typeTemplate:cpp/meta/dsc is invocable typeTemplate:cpp/meta/dsc is invocable r typeTemplate:cpp/meta/dsc is nothrow invocable typeTemplate:cpp/meta/dsc is nothrow invocable r typeTemplate:cpp/meta/dsc remove constTemplate:cpp/meta/dsc remove volatileTemplate:cpp/meta/dsc remove cvTemplate:cpp/meta/dsc add constTemplate:cpp/meta/dsc add volatileTemplate:cpp/meta/dsc add cvTemplate:cpp/meta/dsc remove referenceTemplate:cpp/meta/dsc add lvalue referenceTemplate:cpp/meta/dsc add rvalue referenceTemplate:cpp/meta/dsc make signedTemplate:cpp/meta/dsc make unsignedTemplate:cpp/meta/dsc remove extentTemplate:cpp/meta/dsc remove all extentsTemplate:cpp/meta/dsc remove pointerTemplate:cpp/meta/dsc add pointerTemplate:cpp/meta/dsc remove cvrefTemplate:cpp/meta/dsc decayTemplate:cpp/meta/dsc common typeTemplate:cpp/meta/dsc common referenceTemplate:cpp/meta/dsc underlying typeTemplate:cpp/meta/dsc invoke resultTemplate:cpp/meta/dsc unwrap referenceTemplate:cpp/meta/dsc unwrap ref decayTemplate:cpp/meta/dsc tuple sizeTemplate:cpp/meta/dsc tuple elementTemplate:cpp/meta/dsc is applicable typeTemplate:cpp/meta/dsc is nothrow applicable typeTemplate:cpp/meta/dsc apply resultTemplate:cpp/meta/dsc variant sizeTemplate:cpp/meta/dsc variant alternativeTemplate:cpp/meta/dsc type order
Определён в заголовке <meta>
(C++26)
тип значений отражения
(typedef)
исключение, выбрасываемое функциями отражения
(class)
Продвижение памяти времени компиляции в статическую память
продвигает строку времени компиляции в статическую память, возвращая отражение, представляющее статическую строку
(function template)
продвигает массив времени компиляции в статическую память, возвращая отражение, представляющее статический массив
(function template)
продвигает строку времени компиляции в статическую память, возвращая указатель на первый символ статической строки
(function template)
продвигает массив времени компиляции в статическую память, возвращая span статического массива
(function template)
продвигает значение времени компиляции в статическую память, возвращая указатель на статический объект
(function template)
Представления операторов
(C++26)
идентифицирует перегружаемые операторы
(enum)
идентифицирует оператор, представленный отражением
(function)
преобразует перечислитель meta::operators в его символьное имя
(function)
Имена и местоположения отражения
проверяет, представляет ли отражение сущность, имеющую идентификатор
(function)
если отражаемая сущность имеет идентификатор, получает её имя
(function)
получает строку, подходящую для идентификации отражаемой сущности
(function)
получает исходное местоположение отражаемой сущности
(function)
Запросы отражения
(C++26)
получает отражение типа отражаемой сущности
(function)
(C++26)
получает отражение объекта отражаемой переменной
(function)
получает отражение константного значения отражаемой сущности
(function)
проверяет, представляет ли отражение открытый, защищённый или закрытый член или базовый класс
(function)
проверяет, представляет ли отражение виртуальную функцию-член или виртуальный базовый класс
(function)
проверяет, представляет ли отражение чистую виртуальную функцию-член
(function)
проверяет, представляет ли отражение функцию-член, которая переопределяет другую функцию-член
(function)
(C++26)
проверяет, представляет ли отражение конечный класс или конечную функцию-член
(function)
проверяет, представляет ли отражение удалённую функцию
(function)
проверяет, представляет ли отражение функцию по умолчанию
(function)
проверяет, представляет ли отражение предоставленную пользователем функцию
(function)
проверяет, представляет ли отражение объявленную пользователем функцию
(function)
проверяет, представляет ли отражение функцию-член, объявленную как explicit
(function)
проверяет, представляет ли отражение функцию или тип функции с noexcept
(function)
проверяет, представляет ли отражение битовое поле или описание элемента данных битового поля
(function)
проверяет, представляет ли отражение перечислитель
(function)
проверяет, представляет ли отражение аннотацию
(function)
(C++26)
проверяет, представляет ли отражение тип const или тип функции с квалификатором const
(function)
проверяет, представляет ли отражение тип volatile или тип функции с квалификатором volatile
(function)
проверяет, представляет ли отражение mutable нестатический элемент данных
(function)
проверяет, является ли отражаемая сущность функцией-членом с квалификацией ref
(function)
проверяет, имеет ли отражаемая сущность длительность хранения
(function)
проверяет, имеет ли отражаемая сущность связывание
(function)
проверяет, имеет ли отражаемая сущность связывание с языком "C" language linkage (extern "C")
(function)
проверяет, представляет ли отражение завершённый тип
(function)
проверяет, полностью ли определён список членов отражаемого типа
(function)
проверяет, представляет ли отражение переменную
(function)
(C++26)
проверяет, представляет ли отражение тип
(function)
проверяет, представляет ли отражение пространство имён
(function)
проверяет, представляет ли отражение псевдоним типа
(function)
проверяет, представляет ли отражение псевдоним пространства имён
(function)
проверяет, представляет ли отражение функцию
(function)
проверяет, представляет ли отражение функцию преобразования
(function)
проверяет, представляет ли отражение перегрузку оператора
(function)
проверяет, представляет ли отражение оператор пользовательского литерала
(function)
проверяет, представляет ли отражение специальную функцию-член
(function)
проверяет, является ли отражаемая сущность конструктором данного вида
(function)
проверяет, является ли отражаемая сущность оператором присваивания данного вида
(function)
проверяет, является ли отражаемая сущность деструктором
(function)
проверяет, представляет ли отражение параметр функции
(function)
проверяет, представляет ли отражение явный объектный параметр
(function)
проверяет, имеет ли отражённый параметр функции аргумент по умолчанию
(function)
проверяет, представляет ли отражение функцию или тип функции с параметром-многоточием
(function)
(C++26)
проверяет, представляет ли отражение (скалярное) значение
(function)
(C++26)
проверяет, представляет ли отражение статический объект
(function)
проверяет, представляет ли отражение структурированную привязку
(function)
проверяет, представляет ли отражение член класса
(function)
проверяет, представляет ли отражение член пространства имён
(function)
проверяет, представляет ли отражение нестатический элемент данных
(function)
проверяет, представляет ли отражение статический член класса
(function)
(C++26)
проверяет, представляет ли отражение отношение прямого базового класса
(function)
проверяет, имеет ли отражённый нестатический элемент данных инициализатор по умолчанию
(function)
проверяет, содержится ли отражаемая сущность в области видимости
(function)
(C++26)
получает область видимости, содержащую отражаемую сущность
(function)
(C++26)
получает отражение базовой сущности отражённого псевдонима типа/пространства имён
(function)
проверяет, получена ли отражаемая сущность путём подстановки аргументов шаблона в шаблон
(function)
получает отражение шаблона, использованного для инстанцирования отражаемой сущности
(function)
получает аргументы шаблона отражаемой сущности
(function)
получает параметры отражённой функции
(function)
получает переменную отражённого параметра функции в определении функции
(function)
получает возвращаемый тип отражённой функции
(function)
Запросы доступности
представляет контекст для проверки доступа
(class)
проверяет, доступен ли член в заданном контексте
(function)
проверяет, есть ли у отражённого класса недоступные нестатические элементы данных
(function)
проверяет, есть ли у отражённого класса недоступные прямые базовые классы
(function)
проверяет, есть ли у отражённого класса недоступные нестатические элементы данных или прямые базовые классы
(function)
Идентификация области видимости
возвращает отражение охватывающей функции
(function)
возвращает отражение охватывающего класса
(function)
возвращает отражение охватывающего пространства имён
(function)
Запросы членов отражения
получает доступные прямые члены отражённого класса или пространства имён
(function)
(C++26)
получает доступные прямые базовые классы отражённого класса
(function)
получает доступные статические элементы данных отражённого класса
(function)
получает доступные нестатические элементы данных отражённого класса
(function)
получает доступные подобъекты базовых классов и нестатические элементы данных отражённого класса
(function)
получает перечислители отражённого перечислительного типа
(function)
Запросы компоновки отражения
(C++26)
возвращает смещение (члена или базового) подобъекта относительно его охватывающего класса
(function)
(C++26)
возвращает размер в байтах отражённого объекта или типа
(function)
возвращает выравнивание отражённого объекта или типа
(function)
возвращает размер в битах отражённого объекта или типа
(function)
Отражение аннотаций
получает аннотации, применяемые к отражаемой сущности
(function)
получает аннотации, которые применяются к отражаемой сущности и имеют указанный тип
(function)
Извлечение значений
(C++26)
извлекает значение отражаемой сущности
(function template)
Подстановка отражения
определяет диапазон значений отражения
(concept)
проверяет, могут ли отражённые аргументы быть подставлены в отражённый шаблон
(function template)
получает отражение результата подстановки отражённых аргументов в отражённый шаблон
(function template)
Отражение результата выражения
возвращает отражение, представляющее значение или объект параметра шаблона, подходящее для использования в качестве константного аргумента шаблона
(function template)
возвращает отражение, представляющее объект, подходящее для использования в качестве константного аргумента шаблона
(function template)
возвращает отражение, представляющее функцию, подходящее для использования в качестве константного аргумента шаблона
(function template)
Генерация определения класса
создаёт описание элемента данных для использования с вставленными объявлениями
(function)
проверяет, представляет ли отражение описание элемента данных
(function)
определяет агрегатный тип из последовательности описаний элементов данных
(function template)
Первичные категории типов
Составные категории типов
Свойства типов
Запросы свойств типов
Отношения типов
Модификации const-volatile
Модификации ссылок
Модификации знака
Модификации массивов
Модификации указателей
Другие преобразования
Проверка строковых литералов
проверяет, указывает ли указатель на строковый литерал
(function)

Примечания

Макрос проверки возможности Значение Стандарт Возможность
__cpp_lib_reflection 202506L (C++26) <meta>: Поддержка библиотеки отражений.
Constexpr-исключения как обработка ошибок в отражении.

Пример