Я реализую абстрактный шаблон фабрики (в c ++), но есть небольшая проблема.
Я бы хотел избежать создания места, которое должно знать во время компиляции, какие фабрики существуют.
Обычно в примерах я вижу что-то вроде этого.
Factory * getFactory()
{
if(/*we should make factoryA*/)
{
return FactoryA::instance();
}
else if(/*we should return FactoryB*/)
{
return FactoryB::instance();
}
else
{
return NULL;
}
}
Я мог бы сделать что-то подобное, но я хочу лучше!
Я имею в виду, что Фабрикабазовый класс будет иметь список фабрик, каждый класс, унаследованный от Factory , создаст статический экземпляр и добавит этот экземпляр в список через функцию защищенного класса в Factory .
Однако я не могу придумать, как это сделать, не играя в русскую рулетку с инициализацией статического объекта.