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,
ulongse convierte en un alias paraunsigned long, permitiendo usarulongen lugar de escribirunsigned longcada 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,
Puntoes un alias para la estructura anónima- Permite usar
Puntodirectamente para declarar variables de tipo estructura
Ejemplos prácticos
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,
FuncionCallbackes un alias para un puntero a una función que toma dosinty devuelvevoid
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.