- Examples
Let's look at the examples of variadic templates.
We'll cover the following...
Example 1: Variadic Template
Press + to interact
// templateVariadicTemplates.cpp#include <iostream>template <typename... Args>int printSize(Args... args){return sizeof ...(args);}template<int ...>struct Mult;template<>struct Mult<>{static const int value= 1;};template<int i, int ... tail>struct Mult<i, tail ...>{static const int value= i * Mult<tail ...>::value;};int main(){std::cout << std::endl;std::cout << "printSize(): " << printSize() << std::endl;std::cout << "printSize(template,2011,true): " << printSize("template",2011,true) << std::endl;std::cout << "printSize(1, 2.5, 4, 5, 10): " << printSize(1, 2.5, 4, 5, 10) << std::endl;std::cout << std::endl;std::cout << "Mult<10>::value: " << Mult<10>::value << std::endl;std::cout << "Mult<10,10,10>::value: " << Mult<10,10,10>::value << std::endl;std::cout << "Mult<1,2,3,4,5>::value: " << Mult<1,2,3,4,5>::value << std::endl;std::cout << std::endl;}
Explanation
In the above example, we have used printSize
function, which prints the number of elements (of any type) passed as arguments. It detects the number of elements on compile-time using the sizeof
operator, and in case of an empty argument list, it returns 0.
There is a struct
defined as Mult
which takes arguments of integer type and return their product. If there is no argument passed, then it returns 1 which is the neutral element for multiplication. The result is stored in the value
...