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

Variadic template

Variadic template - это шаблон, который принимает переменное число параметров. С его помощью можно создавать функции и классы, работающие с любым количеством аргументов произвольных типов. Параметры шаблона упаковываются в так называемый пакет параметров (parameter pack), который обозначается многоточием после имени. Распаковка пакета выполняется с помощью многоточия после выражения.

Синтаксис

template <typename... Args> void func(Args... args) { // ... }

Здесь Args - это пакет типов, а args - пакет значений. Распаковать пакет можно, например, через рекурсию или свёртку (fold expression).

Пример

Давайте напишем функцию 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.5, "abcde", 'x'); return 0; }

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

"1 2.5 abcde x"

Пример

Давайте посчитаем сумму произвольного количества чисел с помощью свёртки (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

Пример

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

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

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

3 2

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

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