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

Пакет параметров шаблона (англ. 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. Вандевурд, Джосаттис, Грегор, 2018, Пакеты параметров шаблонов, с. 231.
  2. Olsson, 2018, Variadic Templates, p. 168.
  3. Parameter pack(since C++11) en.cppreference.com
  4. Вандевурд, Джосаттис, Грегор, 2018, Параметры шаблонов, с. 227.
  5. Вандевурд, Джосаттис, Грегор, 2018, Вариативные шаблоны, с. 244.
  6. Вандевурд, Джосаттис, Грегор, 2018, Оператор sizeof..., с. 91.
  7. Вандевурд, Джосаттис, Грегор, 2018, Выражения свертки, с. 92.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.