C++ Variadic e Fold Expression

Da Andreabont's Wiki.

Variadic

In C++11 è possibile creare delle funzioni (o metodi) che accettano parametri variabili attraverso la metaprogrammazione data dai template:

Codice

#include <iostream>
 
template<typename T>
 void print(T const& t)
{
  std::cout << t;
}
 
template<typename First, typename ... Rest>
 void print(First const& first, Rest const& ... rest)
{
  std::cout << first;
  print(rest ...);
}
 
int main()
{
  int i = 10;
  std::string s = "Hello world";
  print("i = ", i, " and s = \"", s, "\"\n");
}

Fold Expression

In C++17 è possibile utilizzare la sintassi delle fold espression per fare più o meno la stessa cosa con minor codice:

Codice

#include <iostream>

template<typename ...Args>
void print(Args&&... args) {
    (std::cout << ... << args) << '\n';
}

int main()
{
  int i = 10;
  std::string s = "Hello world";
  print("i = ", i, " and s = \"", s, "\"\n");
}