Questa è una domanda su come funziona Multiple Dispatch.
Supponiamo di avere una gerarchia di tipi come questa:
Drawable -> Shape -> Polygon -> Rectangle
E ci sono tre funzioni (Questo è uno pseudo-codice):
void func(Rectangle*, Drawable*, Drawable*) ...
void func(Rectangle*, Rectangle*, Drawable*) ...
void func(Polygon*, Rectangle*, Rectangle*) ...
Supponiamo che questa sia una parte di codice:
Drawable* x = create_rectangle();
Drawable* y = create_rectangle();
Drawable* z = create_rectangle();
Ovviamente i tipi di x,y,z sono tutti Drawable ma contengono istanze di Rectangle . Quale funzione verrà chiamata se scrivo: func(x, y, z) ?
Non abbiamo alcuna funzione che corrisponda ai tipi esatti di x, y and z , quindi cosa succede in questo caso?