Библиотека рефлексии (с C++26)
Средства, определённые в этом разделе, поддерживают рефлексивное программирование, позволяя программам на C++ как изучать структуру самой программы, так и генерировать код, зависящий от результатов этого изучения.
Основной язык
Библиотека рефлексии работает в сочетании с двумя возможностями основного языка:
Библиотека рефлексии
Типы |
|
Определено в заголовке <meta> |
|
|---|---|
|
(C++26) | тип значений рефлексии (псевдоним типа) |
|
(C++26) | исключение, выбрасываемое функциями рефлексии (класс) |
|
(C++26) | контекст для проверки доступа (класс) |
|
(C++26) | параметры элемента данных, включая имя, выравнивание и ширину битового поля (класс) |
|
(C++26) | смещение элемента или базового класса относительно содержащего его класса (класс) |
|
(C++26) | константы, обозначающие перегружаемые операторы (перечисление) |
Концепции |
|
Определено в заголовке <meta> |
|
|
(C++26) | задаёт диапазон значений рефлексии (концепция) |
Функции |
|
Определены в заголовочном файле <meta> |
|
|---|---|
Перенос данных времени компиляции в статическое хранилище |
|
|
(C++26) | переносит строку времени компиляции в статическое хранилище и возвращает отражение, представляющее статическую строку (шаблон функции) |
|
(C++26) | переносит массив времени компиляции в статическое хранилище и возвращает отражение, представляющее статический массив (шаблон функции) |
|
(C++26) | переносит строку времени компиляции в статическое хранилище и возвращает указатель на первый символ статической строки (шаблон функции) |
|
(C++26) | переносит массив времени компиляции в статическое хранилище и возвращает span статического массива (шаблон функции) |
|
(C++26) | переносит значение времени компиляции в статическое хранилище и возвращает указатель на статический объект (шаблон функции) |
Представления операторов |
|
|
(C++26) | определяет оператор, представленный отражением (функция) |
|
(C++26)(C++26) | преобразует перечислитель meta::operators в его символьное имя (функция) |
Имена и расположение отражений |
|
|
(C++26) | проверяет, представляет ли отражение сущность с идентификатором (функция) |
|
(C++26)(C++26) | если отражённая сущность имеет идентификатор, получает его имя (функция) |
|
(C++26)(C++26) | получает строку, пригодную для идентификации отражённой сущности (функция) |
|
(C++26) | получает исходное местоположение отражённой сущности (функция) |
Запросы отражения |
|
|
(C++26) | определяет тип отражённой сущности (функция) |
|
(C++26) | получает отражение объекта отражённой переменной (функция) |
|
(C++26) | получает отражение постоянного значения отражённой сущности (функция) |
|
(C++26)(C++26)(C++26) | проверяет, представляет ли отражение открытый, защищённый или закрытый член либо базовый класс (функция) |
|
(C++26) | проверяет, представляет ли отражение виртуальную функцию-член или виртуальный базовый класс (функция) |
|
(C++26) | проверяет, представляет ли отражение чистую виртуальную функцию-член (функция) |
|
(C++26) | проверяет, представляет ли отражение функцию-член, переопределяющую другую функцию-член (функция) |
|
(C++26) | проверяет, представляет ли отражение конечный класс или конечную функцию-член (функция) |
|
(C++26) | проверяет, представляет ли отражение удалённую функцию (функция) |
|
(C++26) | проверяет, представляет ли отражение функцию, объявленную по умолчанию (функция) |
|
(C++26) | проверяет, представляет ли отражение функцию, предоставленную пользователем (функция) |
|
(C++26) | проверяет, представляет ли отражение функцию, объявленную пользователем (функция) |
|
(C++26) | проверяет, представляет ли отражение функцию-член, объявленную явной (функция) |
|
(C++26) | проверяет, представляет ли отражение функцию или тип функции с noexcept (функция) |
|
(C++26) | проверяет, представляет ли отражение битовое поле или описание члена данных, являющегося битовым полем (функция) |
|
(C++26) | проверяет, представляет ли отражение перечислитель (функция) |
|
(C++26) | проверяет, представляет ли отражение аннотацию (функция) |
|
(C++26) | проверяет, представляет ли отражение тип const или тип функции с квалификатором const (функция) |
|
(C++26) | проверяет, представляет ли отражение тип volatile или тип функции с квалификатором volatile (функция) |
|
(C++26) | проверяет, представляет ли отражение mutable нестатический член данных (функция) |
|
(C++26)(C++26) | проверяет, является ли отражённая сущность функцией-членом с ref-квалификатором (функция) |
|
(C++26)(C++26)(C++26) | проверяет, имеет ли отражённая сущность длительность хранения (функция) |
|
(C++26)(C++26)(C++26)(C++26) | проверяет, имеет ли отражённая сущность связывание (функция) |
|
(C++26) | проверяет, имеет ли отражённая сущность языковое связывание «C» языка (extern "C") (функция) |
|
(C++26) | проверяет, представляет ли отражение полный тип (функция) |
|
(C++26) | проверяет, полностью ли определён список членов отражённого типа (функция) |
|
(C++26) | проверяет, представляет ли отражение переменную (функция) |
|
(C++26) | проверяет, представляет ли отражение тип (функция) |
|
(C++26) | проверяет, представляет ли отражение пространство имён (функция) |
|
(C++26) | проверяет, представляет ли отражение псевдоним типа (функция) |
|
(C++26) | проверяет, представляет ли отражение псевдоним пространства имён (функция) |
|
(C++26) | проверяет, представляет ли отражение функцию (функция) |
|
(C++26) | проверяет, представляет ли отражение функцию преобразования (функция) |
|
(C++26) | проверяет, представляет ли отражение перегрузку оператора (функция) |
|
(C++26) | проверяет, представляет ли отражение оператор пользовательского литерала (функция) |
|
(C++26) | проверяет, представляет ли отражение специальную функцию-член (функция) |
|
(C++26)(C++26)(C++26)(C++26) | проверяет, является ли отражённая сущность конструктором указанного вида (функция) |
|
(C++26)(C++26)(C++26) | проверяет, является ли отражённая сущность оператором присваивания указанного вида (функция) |
|
(C++26) | проверяет, является ли отражённая сущность деструктором (функция) |
|
(C++26) | проверяет, представляет ли отражение параметр функции (функция) |
|
(C++26) | проверяет, представляет ли отражение явный параметр объекта (функция) |
|
(C++26) | проверяет, имеет ли отражённый параметр функции аргумент по умолчанию (функция) |
|
(C++26) | проверяет, представляет ли отражение функцию или тип функции с параметром-многоточием (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном функции (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном переменной (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном класса (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном псевдонима (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном функции преобразования (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном функции-оператора (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном оператора литерала (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном конструктора (функция) |
|
(C++26) | проверяет, представляет ли отражение концепт (функция) |
|
(C++26) | проверяет, представляет ли отражение (скалярное) значение (функция) |
|
(C++26) | проверяет, представляет ли отражение статический объект (функция) |
|
(C++26) | проверяет, представляет ли отражение структурированную привязку (функция) |
|
(C++26) | проверяет, представляет ли отражение член класса (функция) |
|
(C++26) | проверяет, представляет ли отражение член пространства имён (функция) |
|
(C++26) | проверяет, представляет ли отражение нестатический член данных (функция) |
|
(C++26) | проверяет, представляет ли отражение статический член класса (функция) |
|
(C++26) | проверяет, представляет ли отражение отношение прямого базового класса (функция) |
|
(C++26) | проверяет, имеет ли отражённый нестатический член данных инициализатор по умолчанию (функция) |
|
(C++26) | проверяет, содержится ли отражённая сущность в области видимости (функция) |
|
(C++26) | получает область видимости, содержащую отражённую сущность (функция) |
|
(C++26) | определяет исходную сущность отражённого псевдонима типа или пространства имён (функция) |
|
(C++26) | проверяет, получена ли отражённая сущность подстановкой аргументов шаблона в шаблон (функция) |
|
(C++26) | определяет шаблон, использованный для создания экземпляра отражённой сущности (функция) |
|
(C++26) | получает аргументы шаблона отражённой сущности (функция) |
|
(C++26) | получает параметры отражённой функции (функция) |
|
(C++26) | получает переменную параметра отражённой функции в определении функции (функция) |
|
(C++26) | получает тип возвращаемого значения отражённой функции (функция) |
Запросы доступности |
|
|
(C++26) | проверяет, доступен ли член в заданном контексте (функция) |
|
(C++26) | проверяет, есть ли у отражённого класса недоступные нестатические члены данных (функция) |
|
(C++26) | проверяет, есть ли у отражённого класса недоступные прямые базовые классы (функция) |
|
(C++26) | проверяет, есть ли у отражённого класса недоступные нестатические члены данных или прямые базовые классы (функция) |
Определение области видимости |
|
|
(C++26) | возвращает отражение охватывающей функции (функция) |
|
(C++26) | возвращает отражение охватывающего класса (функция) |
|
(C++26) | возвращает отражение охватывающего пространства имён (функция) |
Запросы членов отражения |
|
|
(C++26) | получает доступные прямые члены отражённого класса или пространства имён (функция) |
|
(C++26) | получает доступные прямые базовые классы отражённого класса (функция) |
|
(C++26) | получает доступные статические члены данных отражённого класса (функция) |
|
(C++26) | получает доступные нестатические члены данных отражённого класса (функция) |
|
(C++26) | получает доступные подобъекты базовых классов и нестатические члены данных отражённого класса (функция) |
|
(C++26) | получает перечислители отражённого перечислимого типа (функция) |
Запросы компоновки отражения |
|
|
(C++26) | возвращает смещение подобъекта (члена или базового класса) относительно охватывающего класса (функция) |
|
(C++26) | возвращает размер отражённого объекта или типа в байтах (функция) |
|
(C++26) | возвращает выравнивание отражённого объекта или типа (функция) |
|
(C++26) | возвращает размер отражённого объекта или типа в битах (функция) |
Отражение аннотаций |
|
|
(C++26) | получает аннотации, применённые к отражённой сущности (функция) |
|
(C++26) | получает аннотации заданного типа, применённые к отражённой сущности (функция) |
Извлечение значения |
|
|
(C++26) | извлекает значение отражённой сущности (шаблон функции) |
Подстановка отражения |
|
|
(C++26) | проверяет, можно ли подставить отражённые аргументы в отражённый шаблон (шаблон функции) |
|
(C++26) | подставляет отражённые аргументы в отражённый шаблон (шаблон функции) |
Отражение результата выражения |
|
|
(C++26) | возвращает отражение, представляющее значение или объект параметра шаблона, пригодное для использования в качестве аргумента шаблона-константы (шаблон функции) |
|
(C++26) | возвращает отражение, представляющее объект, пригодное для использования в качестве аргумента шаблона-константы (шаблон функции) |
|
(C++26) | возвращает отражение, представляющее функцию, пригодное для использования в качестве аргумента шаблона-константы (шаблон функции) |
Генерация определения класса |
|
|
(C++26) | создаёт описание члена данных для использования со внедряемыми объявлениями (функция) |
|
(C++26) | проверяет, представляет ли отражение описание члена данных (функция) |
|
(C++26) | определяет агрегатный тип по последовательности описаний членов данных (шаблон функции) |
Основные категории типов |
|
|
(C++26) | проверяет, является ли отражённый тип void (функция) |
|
(C++26) | проверяет, является ли отражённый тип std::nullptr_t (функция) |
|
(C++26) | проверяет, является ли отражённый тип целочисленным типом (функция) |
|
(C++26) | проверяет, является ли отражённый тип типом с плавающей точкой (функция) |
|
(C++26) | проверяет, является ли отражённый тип типом массива (функция) |
|
(C++26) | проверяет, является ли отражённый тип типом указателя (функция) |
|
(C++26) | проверяет, представляет ли отражение ссылку на lvalue (функция) |
|
(C++26) | проверяет, представляет ли отражение ссылку на rvalue (функция) |
|
(C++26) | проверяет, представляет ли отражение тип указателя на объект-член (функция) |
|
(C++26) | проверяет, представляет ли отражение тип указателя на функцию-член (функция) |
|
(C++26) | проверяет, является ли отражённый тип перечислимым типом (функция) |
|
(C++26) | проверяет, является ли отражённый тип типом объединения (функция) |
|
(C++26) | проверяет, является ли отражённый тип типом класса, не являющегося объединением (функция) |
|
(C++26) | проверяет, является ли отражённый тип типом функции (функция) |
|
(C++26) | проверяет, является ли отражённый тип std::meta::info (функция) |
Составные категории типов |
|
|
(C++26) | проверяет, представляет ли отражение ссылку на lvalue или rvalue (функция) |
|
(C++26) | проверяет, представляет ли отражение арифметический тип (функция) |
|
(C++26) | проверяет, представляет ли отражение фундаментальный тип (функция) |
|
(C++26) | проверяет, является ли отражённый тип типом объекта (функция) |
|
(C++26) | проверяет, является ли отражённый тип скалярным типом (функция) |
|
(C++26) | проверяет, является ли отражённый тип составным типом (функция) |
|
(C++26) | проверяет, представляет ли отражение тип указателя на член (функция) |
Свойства типов |
|
|
(C++26) | проверяет, представляет ли отражение тип с квалификатором const (функция) |
|
(C++26) | проверяет, представляет ли отражение тип с квалификатором volatile (функция) |
|
(C++26) | проверяет, представляет ли отражение тривиально копируемый тип (функция) |
|
(C++26) | проверяет, является ли отражённый тип типом со стандартной компоновкой (функция) |
|
(C++26) | проверяет, является ли отражённый тип типом класса (но не объединения), не имеющим нестатических членов данных (функция) |
|
(C++26) | проверяет, является ли отражённый тип полиморфным типом класса (функция) |
|
(C++26) | проверяет, является ли отражённый тип абстрактным типом класса (функция) |
|
(C++26) | проверяет, является ли отражённый тип конечным типом класса (функция) |
|
(C++26) | проверяет, является ли отражённый тип агрегатным типом (функция) |
|
(C++26) | проверяет, является ли отражённый тип структурным типом (функция) |
|
(C++26) | проверяет, представляет ли отражение знаковый арифметический тип (функция) |
|
(C++26) | проверяет, представляет ли отражение беззнаковый арифметический тип (функция) |
|
(C++26) | проверяет, представляет ли отражение тип массива с известной границей (функция) |
|
(C++26) | проверяет, представляет ли отражение тип массива с неизвестной границей (функция) |
|
(C++26) | проверяет, представляет ли отражение тип перечисления с областью видимости (функция) |
|
(C++26)(C++26)(C++26) | проверяет, имеет ли отражённый тип конструктор для заданных аргументов (шаблон функции) |
|
(C++26)(C++26)(C++26) | проверяет, имеет ли отражённый тип конструктор по умолчанию (функция) |
|
(C++26)(C++26)(C++26) | проверяет, имеет ли отражённый тип конструктор копирования (функция) |
|
(C++26)(C++26)(C++26) | проверяет, можно ли сконструировать отражённый тип из ссылки на rvalue (функция) |
|
(C++26)(C++26)(C++26) | проверяет, имеет ли отражённый тип оператор присваивания для заданного аргумента (функция) |
|
(C++26)(C++26)(C++26) | проверяет, имеет ли отражённый тип оператор присваивания копированием (функция) |
|
(C++26)(C++26)(C++26) | проверяет, имеет ли отражённый тип оператор присваивания перемещением (функция) |
|
(C++26)(C++26)(C++26)(C++26) | проверяет, можно ли обменять объекты одного отражённого типа с объектами такого же или другого отражённого типа (функция) |
|
(C++26)(C++26)(C++26) | проверяет, имеет ли отражённый тип неудалённый деструктор (функция) |
|
(C++26) | проверяет, является ли отражённый тип типом с неявным временем жизни (функция) |
|
(C++26) | проверяет, имеет ли отражённый тип виртуальный деструктор (функция) |
|
(C++26) | проверяет, влияет ли каждый бит объектного представления отражённого типа на его значение (функция) |
|
(C++26) | проверяет, привязывается ли ссылка к временному объекту при прямой инициализации (функция) |
|
(C++26) | проверяет, привязывается ли ссылка к временному объекту при инициализации копированием (функция) |
Запросы свойств типов |
|
|
(C++26) | получает количество измерений отражённого типа массива (функция) |
|
(C++26) | получает размер отражённого типа массива по указанному измерению (функция) |
Отношения между типами |
|
|
(C++26) | проверяет, представляют ли две рефлексии один и тот же тип (функция) |
|
(C++26) | проверяет, представляют ли две рефлексии типы, один из которых является базовым для другого (функция) |
|
(C++26) | проверяет, представляют ли две рефлексии типы, один из которых является виртуальным базовым типом для другого (функция) |
|
(C++26)(C++26) | проверяет, можно ли преобразовать отражённый тип в другой тип (функция) |
|
(C++26) | проверяет, представляют ли две рефлексии типы с совместимым расположением (функция) |
|
(C++26) | проверяет, является ли отражённый тип базовым типом, указатели на который взаимно преобразуемы для другого типа (функция) |
|
(C++26)(C++26)(C++26)(C++26) | проверяет, можно ли вызвать отражённый тип (как если бы использовался std::invoke) с заданными типами аргументов (шаблон функции) |
Изменения const и volatile |
|
|
(C++26)(C++26)(C++26) | удаляет из отражённого типа квалификаторы const и/или volatile (функция) |
|
(C++26)(C++26)(C++26) | добавляет к отражённому типу квалификаторы const и/или volatile (функция) |
Изменения ссылок |
|
|
(C++26) | удаляет ссылку из отражённого типа (функция) |
|
(C++26)(C++26) | добавляет к отражённому типу ссылку lvalue или rvalue (функция) |
Изменения знаковости |
|
|
(C++26) | возвращает соответствующий знаковый тип для отражённого целочисленного типа (функция) |
|
(C++26) | возвращает соответствующий беззнаковый тип для отражённого целочисленного типа (функция) |
Изменения массивов |
|
|
(C++26) | удаляет один размер массива из отражённого типа массива (функция) |
|
(C++26) | удаляет все размеры массива из отражённого типа массива (функция) |
Изменения указателей |
|
|
(C++26) | удаляет указатель из отражённого типа (функция) |
|
(C++26) | добавляет указатель к отражённому типу (функция) |
Другие преобразования |
|
|
(C++26) | объединяет meta::remove_cv и meta::remove_reference (функция) |
|
(C++26) | применяет преобразования типов, выполняемые при передаче аргумента функции по значению (функция) |
|
(C++26) | определяет общий тип для последовательности отражённых типов (шаблон функции) |
|
(C++26) | определяет общий ссылочный тип для последовательности отражённых типов (шаблон функции) |
|
(C++26) | получает базовый целочисленный тип отражённого перечислимого типа (функция) |
|
(C++26) | выводит тип результата вызова вызываемого объекта с набором аргументов (шаблон функции) |
|
(C++26)(C++26) | получает тип ссылки, обёрнутый в std::reference_wrapper (функция) |
|
(C++26) | получает размер отражённого кортежа (функция) |
|
(C++26) | получает тип указанного элемента отражённого кортежа (функция) |
|
(C++26)(C++26) | проверяет, можно ли вызвать вызываемый объект (как если бы использовался std::invoke) с кортежем аргументов (функция) |
|
(C++26) | выводит тип результата вызова вызываемого объекта с кортежем аргументов (функция) |
|
(C++26) | получает количество альтернатив в отражённом варианте (функция) |
|
(C++26) | получает тип альтернативы отражённого кортежа, заданной её индексом (функция) |
|
(C++26) | выполняет трёхстороннее сравнение отражённых типов (функция) |
Проверка строковых литералов |
|
|
(C++26) | проверяет, указывает ли указатель внутрь строкового литерала (функция) |
Примечания
| Макрос проверки поддержки возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_reflection | 202506L | (C++26) |
<meta>: поддержка библиотеки рефлексии.Исключения constexpr для обработки ошибок в рефлексии. |
Пример
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/reflection