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

Документация mpl Последовательности

Последовательности типов времени компиляции являются одной из фундаментальный концепий шаблонного метапрограммирования в С++. Основной целью метапрограммирования – создание универсальных механизмов манипулирования различными последовательностями типов, что требует специфичных подходов для разрешения имеющихся ограничений.

MPL предоставляет набор фундаментальных последовательностей типов и механизмы работы с ними.

Концепции

Концепции последовательностей параллельны концепциям итераторов, с двумя дополнительными классификационными аспектами:

  • Расширяемость;

  • Ассоциативность;

Forward Sequence

(Прямая последовательность)

Описание:

Прямая последовательность - концепция MPL, представляющая последовательность элементов времени компиляции. Элементы последовательности являются типами, доступ к которым осуществляется посредством итераторов. Метафункции begin и end предоставляют итераторы, определяющие границы последовательности элементов. Последовательность гарантирует, что ее элементы располагаются в определенном, возможно не заданном, порядке. Каждая последовательность MPL - прямая последовательность.

Определения:

  • Элемент size: количество элементов последовательности. Является неотрицательным значением.

  • Последовательность является пустой (empty), если ее элемент size - нуль.

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

Для любой прямой последовательности s, должны быть действительными следующие выражения:

Выражение

Тип

Сложность

begin<s>::type

Forward Iterator

Амортизированное постоянное время.

end<s>::type

Forward Iterator

Амортизированное постоянное время.

size<s>::type

Интегральная константа

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

empty<s>::type

Булева интегральная константа

Постоянное время.

front<s>::type

Любой тип

Амортизированное постоянное время.

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

Выражения

Семантика

begin<s>::type

Итератор первого элемента последовательности.

end<s>::type

Итератор следующего за последним элементом последовательности.

size<s>::type

Размер последовательности.

empty<s>::type

Булева интегральная константа с, для которой

c::value == true, если и только если последовательность пуста (empty).

front<s>::type

Первый элемент последовательности.

Инварианты:

Для любой прямой последовательности s всегда поддерживаются следующие инварианты:

  • [begin<s>::type, end<s>::type) - всегда действительный диапазон.

  • Алгоритм обхода диапазона [begin<s>::type, end<s>::type) будет проходить через каждый элемент последовательности s ровно один раз.

  • begin<s>::type идентичен end<s>::type, если и только если последовательность s явялется пустой (empty).

  • Разные итерации через каждый элемент последовательности s, осуществляются в одинаковом порядке.

Модели:

  • vector

  • map

  • range_c

  • iterator_range

  • filter_view

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

Sequences, Bidirectional Sequence, Forward Iterator, begin / end, size, empty, front

Bidirectional Sequence

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