Typedef para puntero de función en C++
Este artículo explicará el propósito de typedef
en C/C++. Discutiremos más a fondo cómo podemos usar typedef
con un puntero de función y cuáles son los beneficios de usarlo.
Analicemos primero typedef
y su uso común.
la palabra clave typedef
typedef
significa definición de tipo. Como sugiere el nombre, typedef
es una forma de asignar un nuevo nombre a un tipo de datos existente, el tipo de una variable.
Por ejemplo, si desea almacenar una variable entera, el tipo de datos será int. De manera similar, el tipo de datos char o string se usa para una palabra o frase.
#include <iostream>
#include <string>
using namespace std;
int main() {
int a = 10;
string greeting = "Hello!";
return 0;
}
Con la ayuda de typedef
, puede separarse de los tipos reales que se utilizan y concentrarse más en la idea de lo que debería significar una variable. Esto hace que escribir código limpio sea más simple, pero también hace que editar su código sea mucho más simple.
Por ejemplo, si está grabando las declaraciones de tres jugadores diferentes después de un partido de cricket, puede usar typedef
.
#include <iostream>
using namespace std;
int main() {
typedef char* statement;
statement PlayerA = "I played bad";
statement PlayerB = "I played very well";
statement PlayerC = " I could not get the chance to Bat";
cout << "Player A said:" << PlayerA;
return 0;
}
En el código anterior, char*
es un puntero de carácter en el que hemos aplicado la palabra clave typedef
para cambiar este tipo de datos con el nuevo nombre statement
. Este nuevo alias es más significativo en este caso ya que estamos grabando las declaraciones de los jugadores.
Por lo tanto, el typedef
mejora la legibilidad del código.
El typedef
también se puede utilizar con punteros de función. Antes de saltar a eso, presentemos brevemente los punteros de función.
Punteros de función
En C++, los punteros son variables que contienen la dirección de memoria de una variable. De manera similar, un puntero de función es un puntero que contiene la dirección de una función.
Un puntero de función se puede declarar con el siguiente código:
int (*point_func)(int, int);
En el código anterior, point_func
es un puntero que apunta a una función que tiene dos variables enteras como argumentos e int como tipo de retorno.
typedef
con puntero de función
La sintaxis parece extraña para typedef
con un puntero de función. Solo necesita poner la palabra clave typedef
al comienzo de la declaración del puntero de función.
typedef int (*point_func)(int, int);
El comando anterior significa que definió un nuevo tipo con el nombre point_func
(un puntero de función que toma dos argumentos int y devuelve un número entero, es decir, int (*) (int, int)
). Ahora puede usar este nuevo nombre para la declaración de punteros.
Veamos el siguiente ejemplo de programación:
#include <iostream>
using namespace std;
int abc(int x1, int x2) { return (x1 * x2); }
int main() {
typedef int (*pair_func)(int, int);
pair_func PairProduct; // PairProduct is pointer of type pair_func
PairProduct = &abc; // PairProduct pointer holds the address of function abc
int product = (*PairProduct)(20, 5);
cout << "The product of the pair is: " << product;
return 0;
}
Producción :
The product of the pair is: 100
Está claro hasta este punto qué hace typedef
si se usa antes del puntero de función. La función abc
toma dos argumentos y devuelve su producto en el código anterior.
En la función main
, usamos typedef
para definir un nuevo nombre para el puntero de función (es decir, pair_func
). Luego, definimos el PairProduct
de tipo pair_func
y le asignamos la función abc
dirección.
Después de eso, llamamos a la función abc
eliminando la referencia del puntero PairProduct
(sintaxis más simple) y pasando dos argumentos.