Plantillas de funciones variádicas en C++

Las plantillas variádicas son plantillas de clase o función , que pueden tomar cualquier número variable (cero o más) de argumentos. En C++, las plantillas pueden tener un número fijo de parámetros solo que deben especificarse en el momento de la declaración. Sin embargo, las plantillas variadas ayudan a superar este problema. Douglas Gregor y Jaakko Järvi idearon esta característica para C++.

Los argumentos variádicos son muy similares a las arrays en C++. Podemos iterar fácilmente a través de los argumentos, encontrar el tamaño (longitud) de la plantilla, acceder a los valores mediante un índice y también dividir las plantillas. 

Básicamente, las plantillas de funciones de Variadic son funciones que pueden tomar múltiples números de argumentos.

Sintaxis:

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

Nota: Los argumentos deben colocarse entre corchetes angulares. 

A continuación se muestra un ejemplo en C++ para mostrar cómo podemos usar una plantilla de función variádica:

CPP

// 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.\n";
}
 
// 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\n");
 
    return 0;
}
Producción

1
2
3.14
Pass me any number of arguments
I will print

I am empty function and I am called at last.

Recuerde que las plantillas son reemplazadas por funciones reales por el compilador .

Explicación: Las plantillas variádicas funcionan de la siguiente manera: 

La declaración, print(1, 2, 3.14, “Pásame cualquier número de argumentos”, “Imprimiré\n”); se evalúa de la siguiente manera: 

En primer lugar, el compilador resuelve la declaración en 

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

Ahora, el compilador encuentra una función de impresión() que puede tomar esos argumentos y, como resultado, ejecuta la función de impresión variable() nuevamente de manera similar: 

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

Nuevamente, se resuelve en las siguientes formas: 

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

Ahora, en este punto, el compilador busca una sobrecarga de función cuya coincidencia sea la función vacía, es decir, la función que no tiene argumento. Esto significa que todas las funciones que tienen 1 o más argumentos se comparan con la plantilla variádica y todas las funciones que no tienen argumentos se comparan con la función vacía.

Este artículo es una contribución de MAZHAR IMAM KHAN . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *