Sto lavorando su un sistema embedded che si interfaccia con l'utente con diversi pulsanti e un piccolo display grafico.
Come nota a margine: poiché sono su un sistema embedded, vorrei evitare il più possibile l'allocazione dinamica della memoria. Qualcosa come std :: vector non è nemmeno disponibile.
Ho bisogno di implementare un menu di configurazione usando una classica struttura di menu annidata come questa:
Level A Node 1
 -> Level B Node 1
    -> Level C Node 1
 -> Level B Node 2
 -> Level B Node 3
Level A Node 2
Level A Node 3
Sono molto incerto sull'approccio migliore qui. Ho letto su diversi modi per avvicinarmi a qualcosa del genere come usare il Pattern Composito. Tuttavia, mi imbatto sempre in qualcosa che sembra buono "sulla carta", ma sembra essere un disastro da implementare.
 Il mio pensiero generale è di avere qualcosa una classe   MenuNode    che conosca i suoi sub-nodi e il nodo genitore al momento dell'inizializzazione. Una classe   Menu    potrebbe gestire la navigazione e l'elaborazione del nodo. Ovviamente, ogni   MenuNode    deve eseguire / implementare comportamenti specifici come: 
-  Segnala al   
Menucosa vuole visualizzare (il layout / posizionamento effettivo non dovrebbe essere il problema diMenuNode) - Reagire all'input dell'utente (come un pulsante premere per aumentare / diminuire / cambiare un valore)
 -  Accedi al valore effettivo di interesse (risiedono in una classe   
ApplicationSettings) 
Quale sarebbe il modo migliore per implementarlo?
-  
Utilizza una classe di base (astratta)
MenuNodee crea una sottoclasse per OGNI voce di nodo di menu. Durante l'inizializzazione potrei fornire un puntatore aApplicationSettingso altre dipendenze di cui potrebbe aver bisogno. In qualche modo sembra sbagliato creare 10 classi derivate in cui ciascuna sarà istanziata una sola volta. -  
Utilizza la stessa classe
MenuNodeper ogni nodo e implementa la funzionalità tramite i callback alle funzioni gratuite. Da quello che ho letto è piuttosto comune "accoppiare" funzioni libere con oggetti. Tuttavia, sembra che complicherebbe le cose. Per ogni membro ci potrebbe essere, come ReportButtonPress () o qualcosa del genere, dovrei fornire il callback per l'effettiva implementazione durante l'inizializzazione. -  
Sono sicuro che c'è qualcosa che sto trascurando qui.