cpp-typedef

Cómo usar typedef en C++

En C++, la palabra clave typedef se utiliza para crear alias de tipos de datos existentes, para facilitar la legibilidad y el mantenimiento del código.

Son especialmente adecuados para simplificar la declaración de tipos complejos (como por ejemplo los que implican uso intensivo de punteros).

Además sirven para mejorar la legibilidad, también facilita la portabilidad entre plataformas (por ejemplo, creando alias para tipos de variables con nombres diferentes)

Sintaxis básica

La sintaxis básica de typedef es la siguiente

typedef tipo_de_dato nombre_alias;

Por ejemplo,

typedef unsigned long ulong;

En este ejemplo,

  • ulong se convierte en un alias para unsigned long, permitiendo usar ulong en lugar de escribir unsigned long cada vez.

Usos Comunes de typedef

Alias para tipos de datos simples

El uso más básico de typedef es crear alias para tipos de datos simples, como int, char, float, etc.

typedef int entero;
typedef float real;
typedef char caracter;

Ahora, se pueden usar entero, real, y caracter en lugar de int, float, y char, respectivamente.

Puede parecer un ejemplo “raro” Pero, por ejemplo, es habitual que muchas librerías definan sus tipos i32, f64, y cosas así, para facilitar la portabilidad

Alias para punteros

typedef es especialmente útil para crear alias para punteros, lo que permite mejorar bastante la legibilidad.

typedef int* intPtr;

En este ejemplo, intPtr es un alias para int*.

Alias para tipos estructurados

Cuando se trabaja con estructuras (structs), typedef puede simplificar mucho el uso y declaraciones.

typedef struct {
    int x;
    int y;
} Punto;

Punto p1;
p1.x = 10;
p1.y = 20;

En este ejemplo,

  • Punto es un alias para la estructura anónima
  • Permite usar Punto directamente para declarar variables de tipo estructura

Tipos Complejos y typedef

Para tipos de datos más complejos, como punteros a funciones o arrays, typedef puede hacer que las declaraciones sean mucho más manejables.

Punteros a funciones

La declaración de punteros a funciones puede ser particularmente confusa. typedef puede simplificar esta tarea.

typedef void (*FuncionCallback)(int, int);

void miFuncion(int a, int b) {
    std::cout << "a: " << a << ", b: " << b << std::endl;
}

int main() {
    FuncionCallback callback = miFuncion;
    callback(5, 10);
    return 0;
}

En este ejemplo,

  • FuncionCallback es un alias para un puntero a una función que toma dos int y devuelve void

Arrays y matrices

Para arrays y matrices, typedef también puede ayudarnos a que las declaraciones sean más claras.

typedef int Matriz3i[3][3];

Matriz3i matriz = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

En este ejemplo, Matriz3i es un alias para un arrray bidimensional (una matriz) de enteros de 3x3.