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 paraunsigned long
, permitiendo usarulong
en lugar de escribirunsigned 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
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,
FuncionCallback
es un alias para un puntero a una función que toma dosint
y 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.