Supponiamo che ci sia una classe di oggetti base - lascia che sia chiamata Oggetto - e una lista < Oggetto > contenitore. Esistono molte classi figlio di Object - Child1 , Child2 ecc. Sono tutte archiviate nel contenitore.
Ho bisogno di un modo per iterare su sottoinsiemi di oggetti di qualche particolare classe. Dì, su tutti i Bambini1 o Bambini2 , mentre li stai raggruppando tutti in un unico contenitore in modo da poterli accedere in modo polimorfico.
Si noti che il contenitore viene ridimensionato dinamicamente di tanto in tanto.
Quali sono le possibili soluzioni di design per questo?
Attualmente ne ho creati due:
- introduzione di un iteratore che viene eseguito sull'oggetto di controllo contenitore digita ogni volta
- conservare contenitori aggiuntivi con tutti Child1 e tutti Child2 oggetti dal contenitore principale.
Onestamente, non mi piace in entrambi i casi: il primo, temo, sarà lento perché ci saranno davvero molti oggetti, il secondo è maldestro e richiede l'osservazione di ogni aggiunta di oggetti e cancellazione.
Lo sto scrivendo in C ++.
Aggiorna
Come ulteriore sviluppo della seconda soluzione, ho appena pensato di creare una sottoclasse di un elenco con metodi che restituirebbero sottoliste di particolari tipi di sottoclassi che potrebbero essere tenuti in cache e aggiornati su ogni aggiunta / eliminazione:
for(auto i: gameObjects.sublist<Child1>()) {
...