Las directivas de preprocesador son programas que procesan nuestro código fuente antes de la compilación. Hay una serie de pasos involucrados entre escribir un programa y ejecutar un programa en C/C++.
A continuación se muestra el programa para ilustrar la funcionalidad de las plantillas de funciones:
C++
// C++ program to illustrate // preprocessor directives #include <bits/stdc++.h> #define min(a, b) ((a < b) ? a : b) using namespace std; // Driver code int main() { int a = 2, b = 4; // Find the minimum of a and b cout << "Minimum of both is: " << min(a, b); return 0; }
Minimum of both is: 2
Las plantillas de función son la función genérica que puede manejar diferentes tipos de datos sin necesidad de ningún código separado.
A continuación se muestra el programa para ilustrar la funcionalidad de las plantillas de funciones:
C++
// C++ program to illustrate the use // of Function Templates #include <iostream> #include <stdio.h> using namespace std; // Function Template template <class T> T Min(T x, T y) { return (x < y) ? x : y; } // Driver Code int main() { int a = 4, b = 8; // Find the minimum of a and b cout << "Minimum of both is: " << min(a, b); return 0; }
Minimum of both is: 4
Las plantillas de función se utilizan para crear funciones genéricas que pueden funcionar con cualquier tipo de datos . Por ejemplo, la plantilla de función utilizada para calcular el mínimo de 2 valores de cualquier tipo se puede definir como:
template <class T> T minimum(T a, T b) { return (a < b) ? a : b; }
Pero esta tarea también se puede realizar usando directivas de preprocesador creadas usando la directiva de preprocesador #define . Entonces, el mínimo de los dos números se puede definir como:
#define minimum(a, b) ((a < b) ? a : b)
Las directivas de preprocesador también se pueden lograr utilizando las siguientes declaraciones:
minimum(30, 35); minimum(30.5, 40.5);
En C++ , la mayoría de nosotros preferimos usar plantillas en lugar de directivas de preprocesador porque:
- En el caso de las directivas de preprocesador, no hay verificación de tipos. Pero en el caso de las plantillas, el compilador realiza la verificación completa del tipo.
- Las directivas de preprocesador pueden llamar a un resultado inesperado. Considere una macro que calcula el cuadrado de cualquier número como:
#define sqr(x) (x*x)
- Ahora, si se llama a esta macro usando la siguiente instrucción, x = sqr(4 + 4); entonces la salida esperada es 64 pero genera 24 porque cualquier x en el cuerpo de la macro se reemplaza por 4 + 4 lo que lleva a x = 4 + 4 * 4 + 4 = 24 pero en el caso de las plantillas, no se obtienen resultados tan inesperados.
A continuación se muestra la diferencia tabular entre los dos:
S. No. | Directivas del pre procesador | Plantillas de funciones |
1 | No hay verificación de tipo | Hay verificación de tipo completo |
2 | son preprocesados | ellos son compilados |
3 | Pueden trabajar con cualquier tipo de datos. | Se utilizan con directivas de preprocesador #define |
4 | Pueden causar un resultado inesperado | No se obtienen tales resultados inesperados. |
5 | No garantizan la seguridad del tipo en la instancia. | Garantizan la seguridad del tipo. |
6 | Tienen especialización completa explícita. | No tienen una especialización completa explícita. |
Publicación traducida automáticamente
Artículo escrito por tarunsinghwap7 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA