Variadic Templates
Let's learn about variadic templates in detail in this lesson.
We'll cover the following
Variadic Templates #
A variadic template is a template that can have an arbitrary number of parameters.
template <typename ... Args>
void variadicTemplate(Args ... args){ . . . . }
Parameter Pack #
A template parameter pack is a template parameter that accepts zero or more template arguments (non-types, types, or templates). A function parameter pack is a function parameter that accepts zero or more function arguments.
- By using the ellipsis (…),
Args-
orargs
becomes a parameter pack. Args
is a template parameter pack;args
is a function parameter pack.- Parameter packs can only be packed and unpacked.
- If the ellipsis is at the left of
Args
, the parameter pack will be packed and if the ellipse is at the right ofArgs
, the parameter pack will be unpacked.
The compiler can automatically deduce the template arguments in the case of a function template.
For example, the following classes/functions in the STL extensively use variadic templates. Variadic Templates are often used in the Standard Template Library:
sizeof
-Operator,std::tuple
,std::thread
,std::make_unique
,std::lock
The usage of parameter packs obeys a typical pattern for class templates.
- Perform an operation on the first element of the parameter pack and recursively invoke the operation on the remaining elements.
- The recursion ends after a finite number of steps.
- The boundary condition is typically a fully specialized template.
Get hands-on with 1400+ tech skills courses.