Я пытаюсь разработать игру, и у меня возникли проблемы с управлением созданием и уничтожением игровых объектов, и несколько человек предложили попробовать использовать фабричный шаблон. Я пошел и прочитал образец фабрики, и я пытаюсь его реализовать, и я попал в блокпост.Нарушение круговой зависимости в заводском шаблоне
// inside of EnemyGuy.h
#pragma once
#include "Entity.h"
#include "EntityFactory.h"
class EnemyGuy: public Entity {
public:
void update();
}
//inside of EnemyGuy.cpp
#include "EnemyGuy.h"
void EnemyGuy::update(){
if (you see player)
Entity* shotFired = EntityFactory::create("bullet", params);
}
// inside of EntityFactory.h
#pragma once
class Entity
#include "Bullet.h"
#include "EnemyGuy.h"
class EntityFactory{
public:
static Entity* create(const std::string passed, params);
}
// inside of EntityFactory.cpp
#include "EntityFactory.h"
static Entity* create(const std::string passed, params){
if (passed == "bullet")
return new Bullet(params);
if (passed == "enemyguy")
return new EnemyGuy(params);
}
Я получаю ошибку циклической зависимости, потому что завод должен включать EnemyGuy поэтому он может создавать экземпляры этого и затем EnemyGuy необходимо включить завод, поэтому он может вызвать метод Create().
Обычно вы нарушаете циклическую зависимость с объявлением вперед, но в этом случае форвардное объявление не будет этого делать. Как я могу решить эту проблему?
Удивительное спасибо – user1438585