Hardvariadic
Что такое fold expressions?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Fold expressions (C++17) — синтаксис для «свёртки» parameter pack через бинарный оператор. Заменяет рекурсию шаблонов.
template<class... Args>
void printAll(Args... args) {
(std::cout << ... << args) << '\n'; // binary left fold
}
printAll(1, " ", 2.5, "\n");
template<class... Args>
auto sum(Args... args) { return (args + ...); } // unary right fold
template<class... Args>
auto allTrue(Args... args) { return (args && ...); } // все trueВиды:
- unary right fold
(pack op ...)→((p1 op p2) op p3) op ...; - unary left fold
(... op pack); - binary с init:
(pack op ... op init),(init op ... op pack).
Работает с любым бинарным оператором: +, *, &&, ||, ,, <<, ==.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.