Ecco un esempio concreto minimo per formulare la mia domanda:
Nel gioco a palla piccola, hai un motore fisico che sposta gli oggetti regolarmente:
void move(set< PhysicalObject* > objets, Duration t)
E quel motore può usare il comportamento definito dall'utente quando avviene una collisione (usando una classe di strategia). Ad esempio, la strategia predefinita è di aggiornare le direzioni degli oggetti, ma puoi fornirle una classe di strategia personalizzata che uccide gli oggetti in base ad alcune regole specifiche.
void update_after_collision(DerivedObject* a, DerivedObject* b)
Per implementare un nuovo comportamento durante una collisione, ho alcune classi derivate specifiche (hanno attributi / metodi aggiuntivi corrispondenti alla loro durata, ecc.)
Il problema è: il motore chiama la strategia update_after_collision, quindi non posso usare la mia classe derivata è questa strategia senza usare un pattern visitor o un cast di tipo. Nota che il motore conosce solo la classe base, non quelli derivati.
C'è un modo per evitarlo? Qual è l'approccio standard da osservare?
Un altro paradigma di programmazione è migliore per questo caso particolare?
EDIT: il codice è scritto in C ++