Spec-Zone.ru › C++

Библиотека рефлексии (с C++26)

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

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

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

  • оператор рефлексии ^^
  • спецификаторы splice [: ... :]

Библиотека рефлексии

Типы

Определено в заголовке <meta>
info
(C++26)
тип значений рефлексии
(псевдоним типа)
meta::exception
(C++26)
исключение, выбрасываемое функциями рефлексии
(класс)
access_context
(C++26)
контекст для проверки доступа
(класс)
data_member_options
(C++26)
параметры элемента данных, включая имя, выравнивание и ширину битового поля
(класс)
member_offset
(C++26)
смещение элемента или базового класса относительно содержащего его класса
(класс)
operators
(C++26)
константы, обозначающие перегружаемые операторы
(перечисление)

Концепции

Определено в заголовке <meta>
reflection_range
(C++26)
задаёт диапазон значений рефлексии
(концепция)

Функции

Определены в заголовочном файле <meta>
Перенос данных времени компиляции в статическое хранилище
reflect_constant_string
(C++26)
переносит строку времени компиляции в статическое хранилище и возвращает отражение, представляющее статическую строку
(шаблон функции)
reflect_constant_array
(C++26)
переносит массив времени компиляции в статическое хранилище и возвращает отражение, представляющее статический массив
(шаблон функции)
define_static_string
(C++26)
переносит строку времени компиляции в статическое хранилище и возвращает указатель на первый символ статической строки
(шаблон функции)
define_static_array
(C++26)
переносит массив времени компиляции в статическое хранилище и возвращает span статического массива
(шаблон функции)
define_static_object
(C++26)
переносит значение времени компиляции в статическое хранилище и возвращает указатель на статический объект
(шаблон функции)
Представления операторов
operator_of
(C++26)
определяет оператор, представленный отражением
(функция)
symbol_ofu8symbol_of
(C++26)(C++26)
преобразует перечислитель meta::operators в его символьное имя
(функция)
Имена и расположение отражений
has_identifier
(C++26)
проверяет, представляет ли отражение сущность с идентификатором
(функция)
identifier_ofu8identifier_of
(C++26)(C++26)
если отражённая сущность имеет идентификатор, получает его имя
(функция)
display_string_ofu8display_string_of
(C++26)(C++26)
получает строку, пригодную для идентификации отражённой сущности
(функция)
source_location_of
(C++26)
получает исходное местоположение отражённой сущности
(функция)
Запросы отражения
type_of
(C++26)
определяет тип отражённой сущности
(функция)
object_of
(C++26)
получает отражение объекта отражённой переменной
(функция)
constant_of
(C++26)
получает отражение постоянного значения отражённой сущности
(функция)
is_publicis_protectedis_private
(C++26)(C++26)(C++26)
проверяет, представляет ли отражение открытый, защищённый или закрытый член либо базовый класс
(функция)
is_virtual
(C++26)
проверяет, представляет ли отражение виртуальную функцию-член или виртуальный базовый класс
(функция)
is_pure_virtual
(C++26)
проверяет, представляет ли отражение чистую виртуальную функцию-член
(функция)
is_override
(C++26)
проверяет, представляет ли отражение функцию-член, переопределяющую другую функцию-член
(функция)
is_final
(C++26)
проверяет, представляет ли отражение конечный класс или конечную функцию-член
(функция)
is_deleted
(C++26)
проверяет, представляет ли отражение удалённую функцию
(функция)
is_defaulted
(C++26)
проверяет, представляет ли отражение функцию, объявленную по умолчанию
(функция)
is_user_provided
(C++26)
проверяет, представляет ли отражение функцию, предоставленную пользователем
(функция)
is_user_declared
(C++26)
проверяет, представляет ли отражение функцию, объявленную пользователем
(функция)
is_explicit
(C++26)
проверяет, представляет ли отражение функцию-член, объявленную явной
(функция)
is_noexcept
(C++26)
проверяет, представляет ли отражение функцию или тип функции с noexcept
(функция)
is_bit_field
(C++26)
проверяет, представляет ли отражение битовое поле или описание члена данных, являющегося битовым полем
(функция)
is_enumerator
(C++26)
проверяет, представляет ли отражение перечислитель
(функция)
is_annotation
(C++26)
проверяет, представляет ли отражение аннотацию
(функция)
is_const
(C++26)
проверяет, представляет ли отражение тип const или тип функции с квалификатором const
(функция)
is_volatile
(C++26)
проверяет, представляет ли отражение тип volatile или тип функции с квалификатором volatile
(функция)
is_mutable_member
(C++26)
проверяет, представляет ли отражение mutable нестатический член данных
(функция)
is_lvalue_reference_qualifiedis_rvalue_reference_qualified
(C++26)(C++26)
проверяет, является ли отражённая сущность функцией-членом с ref-квалификатором
(функция)
has_static_storage_durationhas_thread_storage_durationhas_automatic_storage_duration
(C++26)(C++26)(C++26)
проверяет, имеет ли отражённая сущность длительность хранения
(функция)
has_internal_linkagehas_module_linkagehas_external_linkagehas_linkage
(C++26)(C++26)(C++26)(C++26)
проверяет, имеет ли отражённая сущность связывание
(функция)
has_c_language_linkage
(C++26)
проверяет, имеет ли отражённая сущность языковое связывание «C» языка (extern "C")
(функция)
is_complete_type
(C++26)
проверяет, представляет ли отражение полный тип
(функция)
is_enumerable_type
(C++26)
проверяет, полностью ли определён список членов отражённого типа
(функция)
is_variable
(C++26)
проверяет, представляет ли отражение переменную
(функция)
is_type
(C++26)
проверяет, представляет ли отражение тип
(функция)
is_namespace
(C++26)
проверяет, представляет ли отражение пространство имён
(функция)
is_type_alias
(C++26)
проверяет, представляет ли отражение псевдоним типа
(функция)
is_namespace_alias
(C++26)
проверяет, представляет ли отражение псевдоним пространства имён
(функция)
is_function
(C++26)
проверяет, представляет ли отражение функцию
(функция)
is_conversion_function
(C++26)
проверяет, представляет ли отражение функцию преобразования
(функция)
is_operator_function
(C++26)
проверяет, представляет ли отражение перегрузку оператора
(функция)
is_literal_operator
(C++26)
проверяет, представляет ли отражение оператор пользовательского литерала
(функция)
is_special_member_function
(C++26)
проверяет, представляет ли отражение специальную функцию-член
(функция)
is_constructoris_default_constructoris_copy_constructoris_move_constructor
(C++26)(C++26)(C++26)(C++26)
проверяет, является ли отражённая сущность конструктором указанного вида
(функция)
is_assignmentis_copy_assignmentis_move_assignment
(C++26)(C++26)(C++26)
проверяет, является ли отражённая сущность оператором присваивания указанного вида
(функция)
is_destructor
(C++26)
проверяет, является ли отражённая сущность деструктором
(функция)
is_function_parameter
(C++26)
проверяет, представляет ли отражение параметр функции
(функция)
is_explicit_object_parameter
(C++26)
проверяет, представляет ли отражение явный параметр объекта
(функция)
has_default_argument
(C++26)
проверяет, имеет ли отражённый параметр функции аргумент по умолчанию
(функция)
is_vararg_function
(C++26)
проверяет, представляет ли отражение функцию или тип функции с параметром-многоточием
(функция)
is_template
(C++26)
проверяет, является ли отражённая сущность шаблоном
(функция)
is_function_template
(C++26)
проверяет, является ли отражённая сущность шаблоном функции
(функция)
is_variable_template
(C++26)
проверяет, является ли отражённая сущность шаблоном переменной
(функция)
is_class_template
(C++26)
проверяет, является ли отражённая сущность шаблоном класса
(функция)
is_alias_template
(C++26)
проверяет, является ли отражённая сущность шаблоном псевдонима
(функция)
is_conversion_function_template
(C++26)
проверяет, является ли отражённая сущность шаблоном функции преобразования
(функция)
is_operator_function_template
(C++26)
проверяет, является ли отражённая сущность шаблоном функции-оператора
(функция)
is_literal_operator_template
(C++26)
проверяет, является ли отражённая сущность шаблоном оператора литерала
(функция)
is_constructor_template
(C++26)
проверяет, является ли отражённая сущность шаблоном конструктора
(функция)
is_concept
(C++26)
проверяет, представляет ли отражение концепт
(функция)
is_value
(C++26)
проверяет, представляет ли отражение (скалярное) значение
(функция)
is_object
(C++26)
проверяет, представляет ли отражение статический объект
(функция)
is_structured_binding
(C++26)
проверяет, представляет ли отражение структурированную привязку
(функция)
is_class_member
(C++26)
проверяет, представляет ли отражение член класса
(функция)
is_namespace_member
(C++26)
проверяет, представляет ли отражение член пространства имён
(функция)
is_nonstatic_data_member
(C++26)
проверяет, представляет ли отражение нестатический член данных
(функция)
is_static_member
(C++26)
проверяет, представляет ли отражение статический член класса
(функция)
is_base
(C++26)
проверяет, представляет ли отражение отношение прямого базового класса
(функция)
has_default_member_initializer
(C++26)
проверяет, имеет ли отражённый нестатический член данных инициализатор по умолчанию
(функция)
has_parent
(C++26)
проверяет, содержится ли отражённая сущность в области видимости
(функция)
parent_of
(C++26)
получает область видимости, содержащую отражённую сущность
(функция)
dealias
(C++26)
определяет исходную сущность отражённого псевдонима типа или пространства имён
(функция)
has_template_arguments
(C++26)
проверяет, получена ли отражённая сущность подстановкой аргументов шаблона в шаблон
(функция)
template_of
(C++26)
определяет шаблон, использованный для создания экземпляра отражённой сущности
(функция)
template_arguments_of
(C++26)
получает аргументы шаблона отражённой сущности
(функция)
parameters_of
(C++26)
получает параметры отражённой функции
(функция)
variable_of
(C++26)
получает переменную параметра отражённой функции в определении функции
(функция)
return_type_of
(C++26)
получает тип возвращаемого значения отражённой функции
(функция)
Запросы доступности
is_accessible
(C++26)
проверяет, доступен ли член в заданном контексте
(функция)
has_inaccessible_nonstatic_data_members
(C++26)
проверяет, есть ли у отражённого класса недоступные нестатические члены данных
(функция)
has_inaccessible_bases
(C++26)
проверяет, есть ли у отражённого класса недоступные прямые базовые классы
(функция)
has_inaccessible_subobjects
(C++26)
проверяет, есть ли у отражённого класса недоступные нестатические члены данных или прямые базовые классы
(функция)
Определение области видимости
current_function
(C++26)
возвращает отражение охватывающей функции
(функция)
current_class
(C++26)
возвращает отражение охватывающего класса
(функция)
current_namespace
(C++26)
возвращает отражение охватывающего пространства имён
(функция)
Запросы членов отражения
members_of
(C++26)
получает доступные прямые члены отражённого класса или пространства имён
(функция)
bases_of
(C++26)
получает доступные прямые базовые классы отражённого класса
(функция)
static_data_members_of
(C++26)
получает доступные статические члены данных отражённого класса
(функция)
nonstatic_data_members_of
(C++26)
получает доступные нестатические члены данных отражённого класса
(функция)
subobjects_of
(C++26)
получает доступные подобъекты базовых классов и нестатические члены данных отражённого класса
(функция)
enumerators_of
(C++26)
получает перечислители отражённого перечислимого типа
(функция)
Запросы компоновки отражения
offset_of
(C++26)
возвращает смещение подобъекта (члена или базового класса) относительно охватывающего класса
(функция)
size_of
(C++26)
возвращает размер отражённого объекта или типа в байтах
(функция)
alignment_of
(C++26)
возвращает выравнивание отражённого объекта или типа
(функция)
bit_size_of
(C++26)
возвращает размер отражённого объекта или типа в битах
(функция)
Отражение аннотаций
annotations_of
(C++26)
получает аннотации, применённые к отражённой сущности
(функция)
annotations_of_with_type
(C++26)
получает аннотации заданного типа, применённые к отражённой сущности
(функция)
Извлечение значения
extract
(C++26)
извлекает значение отражённой сущности
(шаблон функции)
Подстановка отражения
can_substitute
(C++26)
проверяет, можно ли подставить отражённые аргументы в отражённый шаблон
(шаблон функции)
substitute
(C++26)
подставляет отражённые аргументы в отражённый шаблон
(шаблон функции)
Отражение результата выражения
reflect_constant
(C++26)
возвращает отражение, представляющее значение или объект параметра шаблона, пригодное для использования в качестве аргумента шаблона-константы
(шаблон функции)
reflect_object
(C++26)
возвращает отражение, представляющее объект, пригодное для использования в качестве аргумента шаблона-константы
(шаблон функции)
reflect_function
(C++26)
возвращает отражение, представляющее функцию, пригодное для использования в качестве аргумента шаблона-константы
(шаблон функции)
Генерация определения класса
data_member_spec
(C++26)
создаёт описание члена данных для использования со внедряемыми объявлениями
(функция)
is_data_member_spec
(C++26)
проверяет, представляет ли отражение описание члена данных
(функция)
define_aggregate
(C++26)
определяет агрегатный тип по последовательности описаний членов данных
(шаблон функции)
Основные категории типов
is_void_type
(C++26)
проверяет, является ли отражённый тип void
(функция)
is_null_pointer_type
(C++26)
проверяет, является ли отражённый тип std::nullptr_t
(функция)
is_integral_type
(C++26)
проверяет, является ли отражённый тип целочисленным типом
(функция)
is_floating_point_type
(C++26)
проверяет, является ли отражённый тип типом с плавающей точкой
(функция)
is_array_type
(C++26)
проверяет, является ли отражённый тип типом массива
(функция)
is_pointer_type
(C++26)
проверяет, является ли отражённый тип типом указателя
(функция)
is_lvalue_reference_type
(C++26)
проверяет, представляет ли отражение ссылку на lvalue
(функция)
is_rvalue_reference_type
(C++26)
проверяет, представляет ли отражение ссылку на rvalue
(функция)
is_member_object_pointer_type
(C++26)
проверяет, представляет ли отражение тип указателя на объект-член
(функция)
is_member_function_pointer_type
(C++26)
проверяет, представляет ли отражение тип указателя на функцию-член
(функция)
is_enum_type
(C++26)
проверяет, является ли отражённый тип перечислимым типом
(функция)
is_union_type
(C++26)
проверяет, является ли отражённый тип типом объединения
(функция)
is_class_type
(C++26)
проверяет, является ли отражённый тип типом класса, не являющегося объединением
(функция)
is_function_type
(C++26)
проверяет, является ли отражённый тип типом функции
(функция)
is_reflection_type
(C++26)
проверяет, является ли отражённый тип std::meta::info
(функция)
Составные категории типов
is_reference_type
(C++26)
проверяет, представляет ли отражение ссылку на lvalue или rvalue
(функция)
is_arithmetic_type
(C++26)
проверяет, представляет ли отражение арифметический тип
(функция)
is_fundamental_type
(C++26)
проверяет, представляет ли отражение фундаментальный тип
(функция)
is_object_type
(C++26)
проверяет, является ли отражённый тип типом объекта
(функция)
is_scalar_type
(C++26)
проверяет, является ли отражённый тип скалярным типом
(функция)
is_compound_type
(C++26)
проверяет, является ли отражённый тип составным типом
(функция)
is_member_pointer_type
(C++26)
проверяет, представляет ли отражение тип указателя на член
(функция)
Свойства типов
is_const_type
(C++26)
проверяет, представляет ли отражение тип с квалификатором const
(функция)
is_volatile_type
(C++26)
проверяет, представляет ли отражение тип с квалификатором volatile
(функция)
is_trivially_copyable_type
(C++26)
проверяет, представляет ли отражение тривиально копируемый тип
(функция)
is_standard_layout_type
(C++26)
проверяет, является ли отражённый тип типом со стандартной компоновкой
(функция)
is_empty_type
(C++26)
проверяет, является ли отражённый тип типом класса (но не объединения), не имеющим нестатических членов данных
(функция)
is_polymorphic_type
(C++26)
проверяет, является ли отражённый тип полиморфным типом класса
(функция)
is_abstract_type
(C++26)
проверяет, является ли отражённый тип абстрактным типом класса
(функция)
is_final_type
(C++26)
проверяет, является ли отражённый тип конечным типом класса
(функция)
is_aggregate_type
(C++26)
проверяет, является ли отражённый тип агрегатным типом
(функция)
is_structural_type
(C++26)
проверяет, является ли отражённый тип структурным типом
(функция)
is_signed_type
(C++26)
проверяет, представляет ли отражение знаковый арифметический тип
(функция)
is_unsigned_type
(C++26)
проверяет, представляет ли отражение беззнаковый арифметический тип
(функция)
is_bounded_array_type
(C++26)
проверяет, представляет ли отражение тип массива с известной границей
(функция)
is_unbounded_array_type
(C++26)
проверяет, представляет ли отражение тип массива с неизвестной границей
(функция)
is_scoped_enum_type
(C++26)
проверяет, представляет ли отражение тип перечисления с областью видимости
(функция)
is_constructible_typeis_trivially_constructible_typeis_nothrow_constructible_type
(C++26)(C++26)(C++26)
проверяет, имеет ли отражённый тип конструктор для заданных аргументов
(шаблон функции)
is_default_constructible_typeis_trivially_default_constructible_typeis_nothrow_default_constructible_type
(C++26)(C++26)(C++26)
проверяет, имеет ли отражённый тип конструктор по умолчанию
(функция)
is_copy_constructible_typeis_trivially_copy_constructible_typeis_nothrow_copy_constructible_type
(C++26)(C++26)(C++26)
проверяет, имеет ли отражённый тип конструктор копирования
(функция)
is_move_constructible_typeis_trivially_move_constructible_typeis_nothrow_move_constructible_type
(C++26)(C++26)(C++26)
проверяет, можно ли сконструировать отражённый тип из ссылки на rvalue
(функция)
is_assignable_typeis_trivially_assignable_typeis_nothrow_assignable_type
(C++26)(C++26)(C++26)
проверяет, имеет ли отражённый тип оператор присваивания для заданного аргумента
(функция)
is_copy_assignable_typeis_trivially_copy_assignable_typeis_nothrow_copy_assignable_type
(C++26)(C++26)(C++26)
проверяет, имеет ли отражённый тип оператор присваивания копированием
(функция)
is_move_assignable_typeis_trivially_move_assignable_typeis_nothrow_move_assignable_type
(C++26)(C++26)(C++26)
проверяет, имеет ли отражённый тип оператор присваивания перемещением
(функция)
is_swappable_with_typeis_swappable_typeis_nothrow_swappable_with_typeis_nothrow_swappable_type
(C++26)(C++26)(C++26)(C++26)
проверяет, можно ли обменять объекты одного отражённого типа с объектами такого же или другого отражённого типа
(функция)
is_destructible_typeis_trivially_destructible_typeis_nothrow_destructible_type
(C++26)(C++26)(C++26)
проверяет, имеет ли отражённый тип неудалённый деструктор
(функция)
is_implicit_lifetime_type
(C++26)
проверяет, является ли отражённый тип типом с неявным временем жизни
(функция)
has_virtual_destructor
(C++26)
проверяет, имеет ли отражённый тип виртуальный деструктор
(функция)
has_unique_object_representations
(C++26)
проверяет, влияет ли каждый бит объектного представления отражённого типа на его значение
(функция)
reference_constructs_from_temporary
(C++26)
проверяет, привязывается ли ссылка к временному объекту при прямой инициализации
(функция)
reference_converts_from_temporary
(C++26)
проверяет, привязывается ли ссылка к временному объекту при инициализации копированием
(функция)
Запросы свойств типов
rank
(C++26)
получает количество измерений отражённого типа массива
(функция)
extent
(C++26)
получает размер отражённого типа массива по указанному измерению
(функция)
Отношения между типами
is_same_type
(C++26)
проверяет, представляют ли две рефлексии один и тот же тип
(функция)
is_base_of_type
(C++26)
проверяет, представляют ли две рефлексии типы, один из которых является базовым для другого
(функция)
is_virtual_base_of_type
(C++26)
проверяет, представляют ли две рефлексии типы, один из которых является виртуальным базовым типом для другого
(функция)
is_convertible_typeis_nothrow_convertible_type
(C++26)(C++26)
проверяет, можно ли преобразовать отражённый тип в другой тип
(функция)
is_layout_compatible_type
(C++26)
проверяет, представляют ли две рефлексии типы с совместимым расположением
(функция)
is_pointer_interconvertible_base_of_type
(C++26)
проверяет, является ли отражённый тип базовым типом, указатели на который взаимно преобразуемы для другого типа
(функция)
is_invocable_typeis_invocable_r_typeis_nothrow_invocable_typeis_nothrow_invocable_r_type
(C++26)(C++26)(C++26)(C++26)
проверяет, можно ли вызвать отражённый тип (как если бы использовался std::invoke) с заданными типами аргументов
(шаблон функции)
Изменения const и volatile
remove_cvremove_constremove_volatile
(C++26)(C++26)(C++26)
удаляет из отражённого типа квалификаторы const и/или volatile
(функция)
add_cvadd_constadd_volatile
(C++26)(C++26)(C++26)
добавляет к отражённому типу квалификаторы const и/или volatile
(функция)
Изменения ссылок
remove_reference
(C++26)
удаляет ссылку из отражённого типа
(функция)
add_lvalue_referenceadd_rvalue_reference
(C++26)(C++26)
добавляет к отражённому типу ссылку lvalue или rvalue
(функция)
Изменения знаковости
make_signed
(C++26)
возвращает соответствующий знаковый тип для отражённого целочисленного типа
(функция)
make_unsigned
(C++26)
возвращает соответствующий беззнаковый тип для отражённого целочисленного типа
(функция)
Изменения массивов
remove_extent
(C++26)
удаляет один размер массива из отражённого типа массива
(функция)
remove_all_extents
(C++26)
удаляет все размеры массива из отражённого типа массива
(функция)
Изменения указателей
remove_pointer
(C++26)
удаляет указатель из отражённого типа
(функция)
add_pointer
(C++26)
добавляет указатель к отражённому типу
(функция)
Другие преобразования
remove_cvref
(C++26)
объединяет meta::remove_cv и meta::remove_reference
(функция)
decay
(C++26)
применяет преобразования типов, выполняемые при передаче аргумента функции по значению
(функция)
common_type
(C++26)
определяет общий тип для последовательности отражённых типов
(шаблон функции)
common_reference
(C++26)
определяет общий ссылочный тип для последовательности отражённых типов
(шаблон функции)
underlying_type
(C++26)
получает базовый целочисленный тип отражённого перечислимого типа
(функция)
invoke_result
(C++26)
выводит тип результата вызова вызываемого объекта с набором аргументов
(шаблон функции)
unwrap_referenceunwrap_ref_decay
(C++26)(C++26)
получает тип ссылки, обёрнутый в std::reference_wrapper
(функция)
tuple_size
(C++26)
получает размер отражённого кортежа
(функция)
tuple_element
(C++26)
получает тип указанного элемента отражённого кортежа
(функция)
is_applicable_typeis_nothrow_applicable_type
(C++26)(C++26)
проверяет, можно ли вызвать вызываемый объект (как если бы использовался std::invoke) с кортежем аргументов
(функция)
apply_result
(C++26)
выводит тип результата вызова вызываемого объекта с кортежем аргументов
(функция)
variant_size
(C++26)
получает количество альтернатив в отражённом варианте
(функция)
variant_alternative
(C++26)
получает тип альтернативы отражённого кортежа, заданной её индексом
(функция)
type_order
(C++26)
выполняет трёхстороннее сравнение отражённых типов
(функция)
Проверка строковых литералов
is_string_literal
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API