Diciamo che stiamo progettando un videogioco. Abbiamo alcuni sprite sulla mappa e vogliamo chiamare qualche metodo del particolare sprite in una posizione particolare.
Stiamo utilizzando un framework C ++ ampiamente noto . Ha una classe GraphicsItem
e TUTTI i nostri sprite ne derivano. Ora, framework ha un metodo per ottenere un puntatore del GraphicsItem
in qualsiasi posizione sulla mappa.
Ora abbiamo due opzioni:
-
Trasmetti da
GraphicsItem*
al nostroSprite*
e chiama il metodoSprite
. (Sappiamo per certo che tutti gli elementi grafici sulla mappa sono istanze diSprite
) -
Crea alcune cose pazze come memorizza i puntatori su
Sprite
in un contenitore, esegui iterate su di esse, confronta le valute degli indirizzi e ottieni ilSprite*
senza casting.
La domanda è: qual è la migliore pratica in questo caso? Mi è stato sempre detto di evitare il typecasting perché significa che hai problemi di progettazione. Ma come posso cambiare design per evitare la tipizzazione qui? E l'iterazione extra su un contenitore con un confronto è solo ... pazza ...