Typedef para puntero de función en C++

Muhammad Zohaib 12 octubre 2023
  1. la palabra clave typedef
  2. typedef con puntero de función
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.