Я пишу общий класс фабрики под названием Factory
C++ шаблон ковариационная полиморфизм
//abstract factory
template <class C>
class Factory{
public:
virtual C* create()=0;
}
//concrete factory
template <class C>
class NormalFactory:public Factory<C>{
public:
C* create(){return new C;}
}
Я хочу сделать следующее:
typedef Factory<Enemy> EnemyFactory;
EnemyFactory* e = new NormalFactory<Troll>; //Troll inherits Enemy
//client code
Enemy* enemy = e->create();
Но, к сожалению, я не могу этого сделать, так как NormalFactory не наследует завод. Есть ли способ сделать это, чтобы достичь того, что я хотел?
(реализации абстрагируемого EnemyFactory, не зная фактический тип Enemy
он create()
)
Это * Параллельные Наследование Иерархии * проблема (считается бухта много как * код запах *). Возможно, вам захочется найти некоторые (Java) шаблоны проектирования, такие как [Посетитель] (http://stackoverflow.com/questions/696350/avoiding-parallel-inheritance-hierarchies). Как приложение к играм, см. [Шаблоны программирования игр] (http://gameprogrammingpatterns.com/contents.html) Роберта Нистрома (EA). В частности, шаблон «Prototype». Кроме того, вы должны рассмотреть возможность того, что вы ошибетесь со всем этим объектно-ориентированным материалом. – Drop