X Tutup
The Wayback Machine - https://web.archive.org/web/20220723045507/https://ru.cppreference.com/w/cpp/meta
Пространства имён
Варианты
Действия

Библиотека метапрограммирования

Материал из cppreference.com
< cpp
 
 
Библиотека метапрограммирования
Черты типов
Категории типов
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Свойства типов
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(до C++20)
(C++11)(устарело в C++20)
(C++11)
Type trait constants
Метафункции
(C++17)
Поддерживаемые операции
Связи и запросы свойств
Модификации типов
(C++11)(C++11)(C++11)
Трансформации типов
(C++11)(устарело в C++23)
(C++11)(устарело в C++23)
(C++11)
(C++11)
(C++17)

(C++11)(до C++20)(C++17)
Рациональная арифметика времени компиляции
Compile-time integer sequences
 

C++ предоставляет средства метапрограммирования, такие как признаки типов, рациональная арифметика времени компиляции и целочисленные последовательности времени компиляции.

Содержание

[править] Свойства типа

Эти черты типа определяют шаблонные интерфейсы времени компиляции для запроса свойств типов.

Попытки специализировать шаблоны определённые в <type_traits> заголовке и описанные в этой секции приводят к неопределённому поведению.

Шаблоны определённые в заголовке <type_traits> могут быть инстанциированы в неполных типах если не указано иное, несмотря на общий запрет на создание экземпляров шаблонов стандартной библиотеки с неполными типами.

Определены в заголовочном файле <type_traits>
Primary type categories
(C++11)
проверяет, является ли тип void
(шаблон класса) [править]
проверяет, является ли тип std::nullptr_t
(шаблон класса) [править]
проверяет, является ли тип целочисленным типом
(шаблон класса) [править]
проверяет, является ли тип типом с плавающей запятой
(шаблон класса) [править]
(C++11)
проверяет, является ли тип типом массива
(шаблон класса) [править]
(C++11)
проверяет, является ли тип типом перечисления
(шаблон класса) [править]
(C++11)
проверяет, является ли тип типом объединения
(шаблон класса) [править]
(C++11)
проверяет, является ли тип типом класса не объединения
(шаблон класса) [править]
проверяет, является ли тип типом функции
(шаблон класса) [править]
проверяет, является ли тип типом указателя
(шаблон класса) [править]
проверяет, является ли тип левосторонней ссылкой
(шаблон класса) [править]
проверяет, является ли тип правосторонней ссылкой
(шаблон класса) [править]
проверяет, является ли тип указателем на нестатический объект-элемент
(шаблон класса) [править]
проверяет, является ли тип указателем на нестатическую функцию-элемент
(шаблон класса) [править]
Composite type categories
проверяет, является ли тип фундаментальным типом
(шаблон класса) [править]
проверяет, является ли тип арифметическим
(шаблон класса) [править]
(C++11)
проверяет, является ли тип целочисленным
(шаблон класса) [править]
(C++11)
проверяет, является ли тип типом объекта
(шаблон класса) [править]
проверяет, является ли тип составным типом
(шаблон класса) [править]
проверяет, является ли тип либо левосторонней ссылкой, либо правосторонней ссылкой
(шаблон класса) [править]
проверяет, является ли тип указателем на нестатическую функцию-элемент или объект-элемент
(шаблон класса) [править]
Type properties
(C++11)
проверяет, является ли тип квалифицированным как const
(шаблон класса) [править]
проверяет, является ли тип volatile квалифицированным
(шаблон класса) [править]
проверяет, является ли тип тривиальным
(шаблон класса) [править]
проверяет, можно ли тривиально скопировать тип
(шаблон класса) [править]
проверяет, является ли тип типом со стандартной компоновкой
(шаблон класса) [править]
(C++11)(устарело в C++20)
проверяет, является ли тип типом простых старых данных (POD)
(шаблон класса) [править]
(C++11)
(устарело в C++17)
(убрано в C++20)
проверяет, является ли тип литеральным
(шаблон класса) [править]
проверяет, влияет ли каждый бит в представлении объекта типа на его значение
(шаблон класса) [править]
(C++11)
проверяет, является ли тип типом класса (но не объединения) и не имеет ли нестатические элементы данных
(шаблон класса) [править]
проверяет, является ли тип типом полиморфного класса
(шаблон класса) [править]
проверяет, является ли тип типом абстрактного класса
(шаблон класса) [править]
(C++14)
проверяет, является ли тип окончательным типом класса
(шаблон класса) [править]
проверяет, является ли тип агрегатным типом
(шаблон класса) [править]
(C++11)
проверяет, является ли тип арифметическим типом со знаком
(шаблон класса) [править]
проверяет, является ли тип беззнаковым арифметическим типом
(шаблон класса) [править]
проверяет, является ли тип типом массива с известной границей
(шаблон класса) [править]
проверяет, является ли тип типом массива с неизвестной границей
(шаблон класса) [править]
проверяет, является ли тип типом перечисления с ограниченной областью видимости
(шаблон класса) [править]
Supported operations
проверяет, есть ли у типа конструктор для определённых аргументов
(шаблон класса) [править]
проверяет, есть ли у типа конструктор по умолчанию
(шаблон класса) [править]
проверяет, есть ли у типа конструктор копирования
(шаблон класса) [править]
проверяет, может ли тип быть сконструирован из правосторонней ссылки
(шаблон класса) [править]
проверяет, есть ли у типа оператор присваивания для определённого аргумента
(шаблон класса) [править]
проверяет, есть ли у типа оператор присваивания копированием
(шаблон класса) [править]
проверяет, есть ли у типа оператор присваивания перемещением
(шаблон класса) [править]
проверяет, есть ли у типа не удалённый деструктор
(шаблон класса) [править]
проверяет, есть ли у типа виртуальный деструктор
(шаблон класса) [править]
проверяет, можно ли поменять местами объекты одного типа на объекты того же или другого типа
(шаблон класса) [править]
Property queries
получает требования к выравниванию типа
(шаблон класса) [править]
(C++11)
получает количество измерений типа, являющимся массивом
(шаблон класса) [править]
(C++11)
получает размер типа массива по указанному измерению
(шаблон класса) [править]
Type relationships
(C++11)
проверяет, являются ли два типа одним и тем же типом
(шаблон класса) [править]
проверяет, является ли тип производным от другого типа
(шаблон класса) [править]
проверяет, можно ли преобразовать тип в другой тип
(шаблон класса) [править]
проверяет, может ли тип быть вызван (как если бы std::invoke) с заданными типами аргументов
(шаблон класса) [править]
проверяет, являются ли два типа совместимыми с компоновкой
(шаблон класса) [править]
проверяет, является ли тип взаимопреобразуемым по указателю (начальной) базой другого типа
(шаблон класса) [править]
проверяет, являются ли объекты типа взаимопреобразуемыми по указателю с указанным подобъектом этого типа
(шаблон функции) [править]
проверяет, соответствуют ли два указанных элемента друг другу в общей начальной подпоследовательности двух указанных типов
(шаблон функции) [править]

[править] Операции над чертами

Определены в заголовочном файле <type_traits>
вариативная логическая метафункция И
(шаблон класса) [править]
вариативная логическая метафункция ИЛИ
(шаблон класса) [править]
(C++17)
логическая метафункция НЕ
(шаблон класса) [править]

[править] Базовые классы

Определены в заголовочном файле <type_traits>
константа времени компиляции указанного типа с указанным значением
(шаблон класса) [править]

Две специализации std::integral_constant обеспечиваются для типа bool:

Определены в заголовочном файле <type_traits>
Specializations
Type Definition
true_type std::integral_constant<bool, true>
false_type std::integral_constant<bool, false>

[править] Модификации типов

Эти черты типа применяют модификации шаблонных параметров и объявляют(иногда в зависимости от условий) type member typedef как результирующий тип.

Попытки специализировать шаблон, определенный в заголовке <type_traits> и описанный в данной статье вызовет неопределенное поведение, за исключением std::common_type and std::basic_common_reference (начиная с C++20) могут быть специализированы как требуется в описании.

Шаблон, определенный в заголовке <type_traits> могут быть инстанциированы с неполным типом, если не указано иное, may be instantiated with an incomplete type unless otherwise specified, несмотря на общий запрет на создание экземпляров шаблонов стандартной библиотеки с неполными типами.

Определены в заголовочном файле <type_traits>
Const-volatility specifiers
удаляет спецификаторы const и/или volatile из данного типа
(шаблон класса) [править]
(C++11)
(C++11)
(C++11)
добавляет спецификаторы const и/или volatile к данному типу
(шаблон класса) [править]
References
удаляет ссылку из данного типа
(шаблон класса) [править]
добавляет левостороннюю или правостороннюю ссылку на данный тип
(шаблон класса) [править]
Pointers
удаляет указатель из данного типа
(шаблон класса) [править]
добавляет указатель на данный тип
(шаблон класса) [править]
Sign modifiers
делает данный целочисленный тип знаковым
(шаблон класса) [править]
делает данный целочисленный тип беззнаковым
(шаблон класса) [править]
Arrays
удаляет одну размерность из данного типа массива
(шаблон класса) [править]
удаляет все измерения из данного типа массива
(шаблон класса) [править]

[править] Разные преобразования

Определены в заголовочном файле <type_traits>
(C++11)(устарело в C++23)
определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера
(шаблон класса) [править]
(C++11)(устарело в C++23)
определяет тип, подходящий для использования в качестве неинициализированного хранилища для всех данных типов
(шаблон класса) [править]
(C++11)
применяет преобразования типов, как при передаче аргумента функции по значению
(шаблон класса) [править]
объединяет std::remove_cv и std::remove_reference
(шаблон класса) [править]
(C++11)
условно удаляет перегрузку функции или специализацию шаблона из разрешения перегрузки
(шаблон класса) [править]
выбирает тот или иной тип на основе логического значения времени компиляции
(шаблон класса) [править]
определяет общий тип группы типов
(шаблон класса) [править]
определяет общий ссылочный тип группы типов
(шаблон класса) [править]
получает базовый целочисленный тип для данного типа перечисления
(шаблон класса) [править]
(C++11)(убрано в C++20)
(C++17)
выводит тип результата вызова вызываемого объекта с набором аргументов
(шаблон класса) [править]
(C++17)
псевдоним шаблона с переменным числом аргументов типа void
(псевдоним шаблона) [править]
возвращает аргумент типа без изменений
(шаблон класса) [править]

[править] Compile-time rational arithmetic

Заголовок <ratio> обеспечивает типы и функции для управления и хранения соотношений времени компиляции.

[править] Целочисленные последовательности времени компиляции

Определены в заголовочном файле <utility>
реализует последовательность целых чисел на этапе компиляции
(шаблон класса) [править]
X Tutup