Выражения свёртки () — элемент синтаксиса языка программирования C++, введённый в стандарте начиная с C++17 и предназначенный для свёртки пакетов параметров вариативных шаблонов с необязательным начальным значениемfold expression(since C++17) en.cppreference.com.
Использование свёртки помогает избежать громоздких рекурсивных вызовов и позволяет записывать применение операций ко всем отдельным аргументам пакета в компактном виде. При обработке списка пакета выражения свёртки могут быть использованы со всеми бинарными операциями C++ за исключением .,-> и [].
Синтаксис объявления вариативного шаблона функции со свёрткой пакета параметров Values: template<class... T> decltype(auto) summation(T... Values) { // разворачивается в выражение Values1 + (Values2 + (Values3 + Values4))... return (Values + ...); }
Синтаксис записи Для разворачивания выражения свёртки стандарт языка предусматривает унарные и бинарные конфигурации расположения аргументов пакета параметров; наличие скобок в них обязательно: Бинарная правая свёртка: (pack op ... op value) Бинарная левая свёртка: (value op ... op pack) Унарная правая свёртка: (pack op ...) Унарная левая свёртка: (... op pack) Проблема определения типа и значения при раскрытии пустой унарной свёртки в общем случае считается ошибкой, за исключением трёх ситуаций: пустое раскрытие унарной свёртки && даёт true, пустое раскрытие унарной свёртки || даёт false, пустое раскрытие унарной свёртки , даёт тип void.
Примечания
Источники
Категория:Шаблоны C++