0
0
CppConceptBeginner · 3 min read

What is Variadic Template in C++: Explanation and Example

A variadic template in C++ is a template that can take any number of template parameters. It allows functions or classes to accept a flexible number of arguments of different types, making code more reusable and generic.
⚙️

How It Works

Imagine you have a tool that can handle any number of items, like a bag that can hold one apple or ten apples without changing its design. A variadic template works similarly by letting you write a template that accepts any number of parameters.

Under the hood, it uses a special syntax with template where the three dots mean "any number of types." The compiler then expands these types one by one, often using recursion or fold expressions, to process each argument.

This flexibility means you don't have to write many versions of the same function or class for different numbers of parameters. Instead, one variadic template can handle them all.

💻

Example

This example shows a simple function that prints all arguments passed to it, no matter how many or what types they are.

cpp
#include <iostream>

// Base case: no arguments
void print() {
    std::cout << "End of print\n";
}

// Variadic template function
template<typename T, typename... Args>
void print(T first, Args... args) {
    std::cout << first << " ";
    print(args...); // recursive call with remaining arguments
}

int main() {
    print(1, 2.5, "hello", 'A');
    return 0;
}
Output
1 2.5 hello A End of print
🎯

When to Use

Use variadic templates when you want to write flexible and reusable code that can handle different numbers and types of arguments. They are especially useful in:

  • Logging functions that accept any number of values.
  • Generic containers or wrappers that store multiple types.
  • Implementing tuple-like structures.
  • Forwarding arguments in template libraries.

This helps reduce code duplication and makes your code easier to maintain.

Key Points

  • Variadic templates allow templates to accept any number of parameters.
  • They use typename... Args syntax to capture multiple types.
  • Recursive calls or fold expressions process each argument.
  • They improve code flexibility and reduce duplication.

Key Takeaways

Variadic templates let you write functions or classes that accept any number of template parameters.
They use the syntax template to capture multiple types.
Recursive calls or fold expressions handle each argument inside the template.
Use them to create flexible, reusable code that works with different argument counts and types.