Есть некоторая иерархия абстрактных базовых классов с набором конкретных классов;
Foo1Base:
Foo1Concrete1; Foo1Concrete2; ...
Foo2Base:
Foo2Concrete1; Foo2Concrete2; ...
Для их создания применяется шаблонная фабрика
template <class T> FooFactory {
void Register(int id);
T* Create(int),
vector<int> GetAvaliable();
}
Соответсвенно, использование:
Factory<Foo1Base>.Create(...)
Теперь есть некоторые другие конкретные классы
BarBase:
BarConcrete1;BarConcrete2;...
Для создания применяется обычная фабрика.
Каждый из конкретных классов использует определенный набор из базовых классов Foo#Base, известный во время компиляции.
Еще до создания конкретного Bar необходимо знать какие из базовых классов Foo будут в нем использоваться. Соответсвенно, в моем понимании у фабрики Bar есть метод, который должен возвращать список с типами используемых параметров, что бы вызвать шаблонную фабрику Foo с каждым из этих параметров, т.е:
Псевдокод:
for( foo_type : vector<FooTypeHolder>) {
auto foos_ = FooFactory <foo_type >.GetAvaliable()
}
Как такое реализовать? Куда копать?