Una forma de piratear forma limitada de polimorfismo en C es hacer algo como esto:Semi-herencia en C: ¿Cómo funciona este fragmento?
typedef struct {
int x;
} base;
typedef struct {
base super;
int y;
} derived;
Ahora se puede hacer referencia a una instancia derivada como una instancia de base, dependiendo de cómo la variable está echada, es decir:
derived my_derived;
my_derived.y = 10;
my_derived.super.x = 20;
//will print 10
printf("%d", (&my_derived)->y);
//will print 20
printf("%d", ((base*)(&my_derived))->x);
Así que mi pregunta es, ¿cómo funciona esto exactamente? ¿Es porque cuando lo haces como base y haciendo referencia a una variable, estás haciendo referencia al miembro int 'x' como el desplazamiento desde el inicio de la estructura 'base'? Esto es lo único que se me ocurre, cualquier ayuda sería apreciada.
Gracias mucho!
1 Este es en realidad garantizada por la especificación C. – bta