Пакет параметров шаблона

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Пакет параметров шаблона (англ. template parameter pack) в языке программирования C++ — параметр шаблонной функции или класса, состоящий из произвольного количества разнородных элементов. Представляет собой краткую запись гетерогенного набора аргументов вариативного шаблона, определяемую с помощью многоточия ...[1][2].

Эта языковая возможность была введена в синтаксис начиная со стандарта C++11[3].

Синтаксис[править | править код]

Синтаксис объявления вариативного шаблона tuple с пакетом параметров Values:

template<typename... Values>
class tuple;

В качестве элементов пакета параметров шаблона могут выступать типы данных (типовые параметры), параметры, не являющиеся типами (нетиповые параметры) и шаблонные параметры шаблонов[4].

Семантика[править | править код]

Когда в пакете параметров определяются его элементы, он разворачивается в последовательность из нулевого или большего числа аргументов[5].

Поведение пакета параметров и его значение для компилятора эквивалентно обычным параметрам, однако он рассматривается как совокупность любого количества своих элементов. Пакеты параметров, которые не являются обобщёнными типами, могут представлять композицию любого числа аргументов соответствующего им типа. В первичных классах шаблонов, шаблонах псевдонимов и шаблонах переменных допускается иметь только один пакет параметров шаблона. Если он присутствует, то его позиция в списке аргументов обязательно должна быть последней. В шаблонах функций ограничения не такие строгие: допускается использование множественных пакетов, разрешено их произвольное расположение, лишь бы каждый аргумент шаблона после пакета мог быть выведен или имел значение по умолчанию[1].

Для определения количества элементов в списке пакета параметров шаблона предназначен оператор sizeof..., который был введён стандартом языка C++11[6]. Начиная со стандарта C++17 имеется возможность свёртки пакета параметров — массового применения любой бинарной операции ко всем его элементам[7].

Источники[править | править код]

  • Д. Вандевурд, Н. Джосаттис, Д. Грегор. Шаблоны C++. Справочник разработчика = C++ Templates. The Complete Guide. — 2-е. — СПб. : «Альфа-книга», 2018. — 848 с. — ISBN 978-5-9500296-8-4.
  • M. Olsson. C++17 Quick Syntax Reference: A Pocket Guide to the Language, APIs and Library. — Third Edition. — Apress, 2018. — ISBN 978-1-4842-3599-7. — doi:10.1007/978-1-4842-3600-0.

Примечания[править | править код]

  1. 1 2 Вандевурд, Джосаттис, Грегор, 2018, Пакеты параметров шаблонов, с. 231.
  2. Olsson, 2018, Variadic Templates, p. 168.
  3. Parameter pack(since C++11) Архивная копия от 11 ноября 2020 на Wayback Machine en.cppreference.com
  4. Вандевурд, Джосаттис, Грегор, 2018, Параметры шаблонов, с. 227.
  5. Вандевурд, Джосаттис, Грегор, 2018, Вариативные шаблоны, с. 244.
  6. Вандевурд, Джосаттис, Грегор, 2018, Оператор sizeof..., с. 91.
  7. Вандевурд, Джосаттис, Грегор, 2018, Выражения свертки, с. 92.