Variadic function templates in C++

Variadic templates are template that take a variable number of arguments. Variadic function templates are functions which can take multiple number of arguments.

Syntax for a variadic function template: :

template(typename arg, typename... args)
return_type function_name(arg var1, args... var2)

Note :, typename arg, typename... args must be
inside angular brackets. 

Below is an example in C++ to show how we can use variadic function template:

// C++ program to demonstrate working of
// Variadic function Template
#include <iostream>
using namespace std;
// To handle base case of below recursive
// Variadic function Template
void print()
    cout << "I am empty function and "
            "I am called at last. " ;
// Variadic function Template that takes 
// variable number of arguments and prints
// all of them.
template <typename T, typename... Types>
void print(T var1, Types... var2)
    cout << var1 << endl ;
    print(var2...) ;
// Driver code
int main()
    print(1, 2, 3.14, "Pass me any "
              "number of arguments"
                  "I will print ");
    return 0;


Pass me any number of arguments
I will print

I am empty function and I am called at last.

Remember that templates are replaced by actual functions by compiler.

The variadic templates work as follows :
The statement, print(1, 2, 3.14, “Pass me any number of arguments”, “I will print ”); is evaluated in following manner :
Firstly, the compiler resolves the statement into

cout<< 1 <<endl ;
print(2, 3.14, "Pass me any number of arguments", 
      "I will print

Now, the compiler finds a print() function which can take those arguments and in result executes the variadic print() funciton again in similar manner :

cout<< 2 <<endl ;
print(3.14, "Pass me any number of arguments", 
      "I will print

Again, it is resolved into the following forms :

cout<< 3.14 <<endl ;
print("Pass me any number of arguments", 
      "I will print


cout<< "Pass me any number of arguments" <<endl ;
print("I will print


cout<< "I will print
" <<endl ;

Now, at this point the compiler searches for a function overload whose match is the empty function i.e. the function which has no argument.

This means that, all functions that have 1 or more arguments are matched to the variadic template and all functions that with no argument are matched to the empty function.

Reference :

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

This article is attributed to GeeksforGeeks.org

You Might Also Like

leave a comment



load comments

Subscribe to Our Newsletter