Search⌘ K

- Examples

Discover how to implement and use C++ templates through practical examples like variadic templates that count elements and calculate products, and perfect forwarding that allows flexible constructor invocation. Learn to enhance your code reuse and efficiency by mastering these template techniques within this lesson.

Example 1: Variadic Template #

C++
// 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 example above, we have used the printSize function, which prints the number of elements (of any type) passed as arguments. It detects the number of elements at compile-time using the sizeof operator, and in case of an empty argument list, returns 0.

There is a struct defined as Mult which takes arguments of integer type and returns their product. If there is no argument ...