C++ parameter pack

C

This article is about parameter packs in C++. In this programming world, C++ introduces us to various diverse templates with parameter packs. Parameter packs contain arbitrary types or values. Through this highly effective technology we can perform our complex tasks efficiently. Parameter pack is a C++ variadic template that can efficiently handle or manipulate multiple variable numbers of template arguments. Here, we will demonstrate about parameter packs in detail by exploring their syntax, usage and ways to create parameter packs with descriptive examples.

What are parameter packs in C++?

First of all, pack generally refers to a parameter or argument pack in the C++ programming language. This allows us to use functions and templates to take a variety of parameters to perform relevant operations. In C++, a variadic template is a template that packs at least one parameter by introducing parameters defined at the time of function definitions. Parameter packs always allow zero or many template arguments. In programming language, “variadic” means taking or allowing any number of arguments.

Types of parameter packs

There are two types of parameter packs in the C++ programming language. These are mentioned as follows:

Let us describe all these types of parameter packs in detail and with appropriate examples.

1. Type parameter pack

Type parameters deal with packaged types and allow handling multiple types within a single parameter.

Syntax:

The syntax of a function template with type parameter pack is given as follows:

outline <Type name…arguments,
void processarg ,logic… logic,
,
, zero or multiple arguments of Type parameter pack
,

Here, “arg” represents the number of arguments.

2. Non-type parameter pack

This parameter pack contains types, values, or references as non-type operations in C++. It efficiently manages one or more non-type template parameters at a time.

Syntax:

The syntax of a non-type parameter pack is given as follows:

outline <int… value,
zero printvalue,,
,
, announced Value In parameter pack
,

Here, the “value” variable contains all “int” values ​​in non-type parameters.

Creating a Parameter Pack

In this section, we will learn about parameter pack creation and usage in C++. We will create parameter packs in different ways such as extension parameter packs.

Scenario 1: Parameter Packs Expansion

In C++, parameter pack expansion is an expression containing one or more parameter packs that is followed by an ellipsis (…). Use of ellipsis indicates that parameter packs are expanded. Additionally, folding expressions in C++ provide us with a better way to operate on all the elements of a parameter pack. We can fold expressions like (+…+args). This applies the entire operation like “Sum” to all the variables or elements we pass.

We can extend the parameter pack within the class template in the same way as we extended the function described in the previous paragraph.

Let's consider the following example:

#include
zero print,, ,
std::cout , std::endl;
,
outline <typename t, typename… args,
zero print,t start, logic… logic, ,
std::cout , Start , ,,
printing,logic…,,
,
int main,, ,
std::cout , “The elements are:”,
printing,4, 12.5, “Examination”, 'V',,
return 0,
,

Here, as you can see, we have declared the required libraries. After that, we created a function with zero arguments. The “print zero” function works when the argument is zero and inserts a new line. After that, we declared another function with multiple arguments. Then we passed these templates to the “print” function here. Finally, we called this function our main program. Remember that only the main function code execution displays the result on the console screen.

Output:


The elements that we passed to the function are displayed as seen in the given screenshot.

Scenario 2: Operation of parameter packs

Here, we will learn about the different ways through which we can handle parameter packs in C++. The methods are explained in detail as follows:

1. Forwarding Parameter Pack

In C++, forwarding parameter packs is introduced as the “std::forward” utility which allows us to completely forward the parameter pack to the desired location. By using this we can preserve their values ​​and references. The syntax is as follows:

Syntax:

outline<typename func, typename…args,
decltype,auto, forwardfunc,Celebration, func1, args,…argument1, ,
return std::forward<logic,,argument1,,,,
,

Now, let us explain this type of parameter pack with the help of a suitable example:

#include
#Involved <उपयोगिता>
outline <type name t,
void processArg,Tea, arg1, ,
std::cout , “The process steps are:” , arg1 , std::endl;
,
outline <Type name…arguments,
void forwardargs,logic,… arg1, ,
,processargs,std::forward<logic,,arg1,,,,,
,
int main,, ,
forwardargs,1, “C++ Example”, 566.6, 'I',,
return 0,
,

Here, we declare the libraries. Then, we create a template-like function template that takes a reference argument and forwards it by calling the value. We use the function name “processArg” and pass the parameter pack like “T&&” with the passing value of “agr1”. After that, we again take a template function with several arguments and call these arguments in the “forwardArgs” function. Finally, we call this function in the body of the program to show the output on the console window.

Output:


The output of this program is shown in the given screenshot to help you.

    • 2. Conditional Manipulation in Parameter Packs

In this section, when working with parameter packs, all conditional statements that depend on the attributes of the packs and their components are used. For conditional manipulation, “std::conditional” is used. It works on templates rather than types rather than values.

Syntax:

outline<Type name…arguments,
zero processor,logic… logic, ,
If constexpr ,The size of…,logic, , 0, ,
, arguments are not empty
, Other ,
, arguments are hollow
,
,

Here is an example to better understand the given syntax. The complete code for conditional manipulation in C++ is given as follows:

#include
zero OddNumArgs,, ,,
outline<typename t, typename… args,
zero OddNumArgs,T First, logic… the rest, ,
If ,First , 2 ,, 0, ,
std::cout , “The odd number is:” , First,,\n, ,
,
OddNumArgs,Rest…,,
,
int main,, ,
OddNumArgs,11, 52, 63, 47, 5, 16, 227, 28, 89, 10,,
return 0,
,

Here, after declaring the libraries required to run the desired code, we create a function template for the parameter pack. In this function, we check whether the parameters or values ​​passed to the function are even or odd numbers. Finally, we pass this function to the main function to show the result which you can see in the following:

conclusion

At the end of this article, we can say that parameter packs are an effective process to handle variadic templates efficiently in the programming world. This allows us to work with variable templates with nonce or multiple arguments for type and non-type templated parameter packs. The folding and expansion of parameter packs are very interesting. Except that, it also operates on an array of function pointers. It is a very versatile concept in C++ programming language and works in maintaining various complex scenarios. For better understanding, practice the examples mentioned to see the output and better understand how the code works.

Add comment

By Ranjan