Ho un albero contenente vari sottotipi della mia classe di nodo base. Ora voglio attraversare questo albero e fare qualcosa con i nodi a seconda del loro tipo.
L'idea più semplice è quella di definire un metodo doSomething
nella mia classe nodo base, ma questo significa che per aggiungere funzionalità devo aggiungere un metodo a tutti i sottotipi di nodi esistenti.
La prima cosa che viene in mente per risolvere questo è il pattern Visitor. Tuttavia, voglio essere in grado di creare nuovi sottotipi senza dover cambiare tutti i visitatori esistenti - Voglio che i nuovi sottotipi ereditino il modo in cui vengono gestiti dal loro tipo di base.
Penso che usare dynamic_cast
dovrebbe fare il trucco, ma ho capito che è un'operazione costosa, e sarà chiamata molto, quindi non è una buona soluzione. E molte persone dicono che è un segno di cattiva progettazione, anche se in questo caso non vedo il problema.
In questo momento sto usando la prima soluzione perché vedo prevedere molti più tipi aggiunti di funzionalità, ma c'è un modo migliore per farlo ?