Seneca the Younger.
I’m new to this topic since I literally just learned about the fold expressions today, and parameter packs days before that, so it will be a short post where I’ll explain the basics 🙂
Let’s jump straight to the code:
templateint sum(Args&&... args) { return (args + ...); }
Line 1 tells us there will be zero or more parameters.
Line 2 declares a function with said variable number of parameters.
Line 4 is where the magic happens. The fold expression states that for every parameter in
args
operator+
args0 + args1 + ... + argsN
Another example:
templateinline void trace(Ts&&... args) { (cout << ... << args) << endl; }
Here in line
cout << args0 << args1 << ... << argsN
Another way of doing the same is:
templateinline void trace(Ts&&... args) { ((cout << args << " "),...) << endl; }
Here the cout << args << " "
That's it for now 🙂 I'll post more as I learn more!
Complete listing:
#includeusing namespace std; template int sum(Args&&... args) { return (args + ...); } template inline void trace(Ts&&... args) { //(cout << ... << args) << endl; ((cout << args << " "),...) << endl; } int main(int argc, char** argv) { trace(sum(1)); trace(sum(1,2,3,4,5)); trace(sum(1,1,2,3,5,8,13,21,34,55)); trace(1, 2, 3); return 1; }