Fold Expressions
Get to know the types of fold expressions added in C++17 and their benefits in this lesson.
We'll cover the following...
Implementing fold expressions
A fold expression is an expression involving a parameter pack that folds (or reduces) the elements of the parameter pack over a binary operator. To understand how this works, we’ll look at several examples. Earlier in this section, we implemented a variable function template called sum
that returned the sum of all its supplied arguments.
For convenience, we’ll show it again here:
template<typename T>T sum(T a){return a;}template<typename T, typename... Args>T sum(T a, Args... args){return a + sum(args...);}
With fold expressions, this implementation that requires two overloads can be reduced to the following form:
template<typename... T>int sum(T... args){return (... + args);}
There’s no need for overloaded functions anymore. The expression (... + args)
represents the fold expression, which upon evaluation becomes ((((arg0 + arg1) + arg2) + ... ) + argN)
. The enclosing parentheses are part of the fold expression. We can use this new implementation, just as we would use the initial one, as ...