Hardvariadicparameter-packs

Что такое variadic templates и parameter packs?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Variadic templates (C++11) — шаблоны с переменным числом параметров. typename... Args — parameter pack; sizeof...(Args) даёт количество.

// Рекурсивная обработка: базовый случай + рекурсия
void f() {}  // базовый случай

template<typename T, typename... Args>
void f(T first, Args... rest) {
    process(first);
    f(rest...);    // распаковка rest
}

// C++17 fold expression проще:
template<typename... Args>
void print_all(Args... a) { (std::cout << ... << a); }

Распаковка через pattern f(args...). Лежит в основе std::make_unique, std::tuple, std::function, emplace. Runtime overhead нет — компилятор разворачивает рекурсию.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.