РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
707 of 815 menu

Пакет параметров

Пакет параметров (parameter pack) - это механизм вариативных шаблонов в C++, который позволяет шаблону принимать ноль или более аргументов. Пакет может содержать параметры типов, параметры шаблонов-шаблонов или параметры-значения. Объявляется пакет с помощью многоточия ... после имени параметра. При раскрытии пакета многоточие ставится после выражения, содержащего пакет. Чаще всего пакет используется в паре с рекурсией или свёрткой (fold expression) для обработки всех переданных аргументов.

Синтаксис

// Объявление пакета параметров типа template <typename... Args> void func(Args... args); // Раскрытие пакета в списке аргументов func(args...); // Раскрытие пакета в списке базовых классов template <typename... Bases> struct Derived : Bases... { };

Пример

Давайте напишем шаблонную функцию print, которая принимает произвольное количество аргументов и выводит их через пробел:

#include <iostream> using namespace std; void print() { cout << endl; } template <typename T, typename... Args> void print(T first, Args... rest) { cout << first << " "; print(rest...); } int main() { print(1, 2, 3, 4, 5); print("abcde", "12345"); return 0; }

Результат выполнения кода:

1 2 3 4 5 "abcde" "12345"

Пример

Давайте посчитаем количество переданных аргументов с помощью оператора sizeof...:

#include <iostream> using namespace std; template <typename... Args> void count(Args... args) { cout << sizeof...(args) << endl; } int main() { count(1, 2, 3); count("abcde"); count(); return 0; }

Результат выполнения кода:

3 1 0

Пример

Давайте вычислим сумму всех переданных аргументов с помощью свёртки (fold expression):

#include <iostream> using namespace std; template <typename... Args> auto sum(Args... args) { return (args + ...); } int main() { cout << sum(1, 2, 3, 4, 5) << endl; return 0; }

Результат выполнения кода:

15

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

  • ключевое слово variadic,
    которое создаёт вариативный шаблон
  • оператор fold,
    который раскрывает пакет параметров
  • ключевое слово template,
    которое объявляет шаблон
  • ключевое слово typename,
    которое задаёт параметр-тип шаблона
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить