Ho più fabbriche, ognuna delle quali è responsabile della creazione di istanze di un albero ereditario. Ad esempio (sintassi o semantica potrebbero non essere corrette),
struct InterfaceA {}; struct ImplA1 : InterfaceA {}; ...
struct FactoryA { vector<InterfaceA*> create(); }
... // (repeat for B, C, etc)
foo
è la classe template
template<ATy, BTy, ..>
struct foo {
// default behavior - no functionality
};
foo
è specializzato per alcune combinazioni di sottoclassi di InterfaceA, InterfaceB e ...
template<>
struct foo<ImplA1, ImplB2, ..> {
void feature1();
void feature2();
};
È possibile combinare le gerarchie di ereditarietà con la classe template? cioè.
void bar(vector<InterfaceA*> vecA, vector<InterfaceB*> vecB, ..) {
foo< /* what to put in here */ >(vecA.front(), vecB.front(), ...) f;
f.feature1(); // if specialization not there, complain
}
Posso usare Pattern modello curiosamente ricorrente (CRTP) per un albero. Non sai come farlo funzionare con alberi multipli.