Variadic Function Arguments
Variadic functions are those that accept a variable number of arguments.
Python
In Python, this is done using the *args
and **kwargs
.
def variadic_function ( * args):
for arg in args:
print (arg)
variadic_function( 1 , 2 , 3 )
def variadic_function ( * args, ** kwargs):
print ( "Positional arguments:" , args)
print ( "Keyword arguments:" , kwargs)
variadic_function( 1 , 2 , 3 , name = "Alice" , age = 30 )
The kwargs
is used for those with keyword arguments
Positional arguments: (1, 2, 3)
Keyword arguments: {'name': 'Alice', 'age': 30}
C++
In C++, we use a Variadic Template s. Note that this different that function overloading , which is defining the function multiples times depending on signature.
template < typename ... Args >
void Hello ( Args ... args ) {
( std ::cout << ... << args) << std ::endl; // Fold expression to print each argument
}
This is available since C++17
On C++11, you would do this
template < typename T , typename ... Args >
void Hello ( T first , Args ... args ) {
std ::cout << first << std ::endl; // Print the first argument
Hello (args...); // Recursively call with remaining arguments
}
It recursively calls it on each argument
Thereās another way, which I found out through chatgpt which is to use <cstdarg>
#include <iostream>
#include <cstdarg>
void variadicFunction ( int num , ...) {
va_list args;
va_start (args, num);
for ( int i = 0 ; i < num; ++ i) {
int value = va_arg (args, int ); // Get next argument, specifying the type
std ::cout << value << std ::endl;
}
va_end (args);
}
int main () {
variadicFunction ( 3 , 10 , 20 , 30 ); // First argument is the count of subsequent arguments
return 0 ;
}