Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
template_metaprogramming_ru.docx
Скачиваний:
12
Добавлен:
01.07.2025
Размер:
774 Кб
Скачать
☆

Метафункции

MPL содержит ряд предопределенных метафункций, которые можно условно разделить на две категории:

  • Общего назначения:

    • Условный выбор типа;

    • Вызов метафункций высшего порядка;

    • Композиция;

    • Связывание аргументов;

  • Числовые метафункции: инкапсулированные встроенные и определенные пользователем:

  • Арифметические операции,

  • Операции сравнения,

  • Логические операции,

  • Побитовые операции.

Контексы применения:

  • Передача вычислений для алгоритма.

  • Выполнение вычислений на нецелых данных. Позволяет использовать в одном выражении целые, друбные, комплексные числовые типы.

Все числовые метафункции могут принимать до N аргументов, где N значение макроса BOOST_MPL_LIMIT_METAFUNCTION_ARITY.

Концепции Метафункция

Описание

Метафункиция это класс или класс шаблона, который представляет собой вызываемую функцию времени компиляции. Не-нульарные метафункция вызывается посредством инстацнирования шаблонного класса аргументами; Результатом работы метафункции есть вложенные элементы «::type» или «::value».

Аргументами выстпуают типы.

Метафункия может иметь переменное число параметров.

Нульарные метафункции являютя ​​классом (шаблонным) с вложенными элементами.

Требования к выражениям:

В следующей таблице и спецификациях, f - метафункция.

Выражение

Тип

Сложность

f::type

Любой тип

Не определено.

f<>::type

Любой тип

Не определено.

f<a1,..,an>::type

Любой тип

Не определено.

Семантика выражений:

typedef f::type x;

Предусловие: f – нульарная метафункция; f::type – имя типа.

Семантика: x – результат вызова метафункции.

typedef f<>::type x;

Предусловие: f – нульарная метафункция; f<>::type – имя типа.

Семантика: x – результат вызова метафункции.

typedef f<a1,... an>::type x;

Предусловие: f – n-арная метафункция; a1,…,an – типы, f<a1,…,an>::type – имя типа.

Семантика: x – результат вызова метафункциис аргументами a1,…,an.

Модели:

  • identit

  • plus

  • begin

  • insert

  • fold

Смотри также:

Metafunctions, Metafunction Class, Lambda Expression, invocation, apply, lambda, bind

Метафункциональный класс

Описание

Метафункциональный класс - определенная форма метафункционального представления для создания метафункций высшего порядка. Это класс с общедоступной вложенной метафункцией apply. Обращение к метафункциональному классу – вызов вложенной метафункции apply.

Требования к выражениям:

В следующей таблице и спецификациях, f – метафункциональный класс.

Выражение

Тип

Сложность

f::apply::type

Любой тип

Не определено.

f::apply<>::type

Любой тип

Не определено.

f::apply<a1,...an>::type

Любой тип

Не определено.

Семантика выражений:

typedef f::apply::type x;

Предусловие: f – нульарный метафункциональный класс; f::apply::type – имя типа.

Семантика: x – результат вызова метафункционального класса.

typedef f::apply<>::type x;

Предусловие: f – нульарный метафункциональный класс; f::apply<>::type – имя типа.

Семантика: x – результат вызова метафункционального класса.

typedef f::apply<a1,... an>::type x;

Предусловие: f – n-арный метафункциональный класс; apply – метафункция.

Семантика: x – результат вызова метафункционального класса с аргументами a1,…,an.

Модели:

  • always

  • arg

  • quote

  • numeric_cast

  • unpack_args

Смотри также:

Metafunctions, Metafunction, Lambda Expression, invocation, apply_wrap, bind, quote

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]