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.