Ho una classe, chiamiamola App , che istanzia e possiede un insieme di classi di tipo Agents , ognuna delle quali crea un'istanza e possiede un set di Listeners . La proprietà è unica e non trasferibile, quindi ovviamente std::unique_ptr . E i numeri possono variare in numero, sebbene di solito non siano molti, quindi un std::vector<std::unique_ptr> funziona bene.
In fase di compilazione, in base a qualche direttiva, posso dire quale Agents è App necessitante, e quale Listener s è ogni Agent necessario. Agent s a App , o Listener s a ogni Agent , può variare in futuro, ma sempre a tempo di compilazione però, una volta che il programma è impostato per eseguire nulla cambierà fino a una nuova versione di il programma è distribuito.
Quindi la domanda è: come posso implementare tutta questa gerarchia ad albero in modo organizzato e a prova di futuro?
Ho provato ad implementare un pattern Metodo di Fabbrica, che darà il Agent s corretto a App (basta lanciare un factory diverso a seconda del flag di compilazione), ma poi sono un po 'bloccato come dire a Agent s quale Listener s di cui hanno bisogno in modo pulito. Mi sembra di nuovo una factory di Listener s che prende come parametro il Agent , e poi ha un'orribile istruzione switch che interroga il tipo di Agent e gli dà il suo Listener s, ma sembra che ottenga disordinato molto veloce.
PD: utilizzando VC2010, che è solo parzialmente conforme a C ++ 11 e pienamente compatibile con TR1.