C++ 打破工厂模式中的循环依赖性

C++ 打破工厂模式中的循环依赖性,c++,factory-pattern,forward-declaration,circular-dependency,C++,Factory Pattern,Forward Declaration,Circular Dependency,我正在尝试开发一款游戏,但我在管理游戏对象的创建和销毁方面遇到了问题,一些人建议我尝试使用工厂模式。 我去阅读了工厂模式,我正在努力实施它,我遇到了一个障碍 // inside of EnemyGuy.h #pragma once #include "Entity.h" #include "EntityFactory.h" class EnemyGuy: public Entity { public: void update(); } //inside of EnemyGuy.cpp

我正在尝试开发一款游戏,但我在管理游戏对象的创建和销毁方面遇到了问题,一些人建议我尝试使用工厂模式。 我去阅读了工厂模式,我正在努力实施它,我遇到了一个障碍

// 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()方法

通常,您会使用前向声明来打破循环依赖关系,但在这种情况下,前向声明无法做到这一点。
如何解决此问题?

工厂头文件不需要包含它。把声明和实现分开,你就没事了

EntityFactory.h:

class Entity

class EntityFactory{ public:
     static Entity* create(const std::string passed, params);
}
EntityFactory.cpp:

#include "EntityFactory.h"
#include "Bullet.h"
#include "EnemyGuy.h"

 Entity* EntityFactory::create(const std::string passed, params){
     if (passed == "bullet")
         return new Bullet(params);
     if (passed == "enemyguy")
         return new EnemyGuy(params);
 }
其思想是,无论添加了多少新选项,工厂头文件和声明永远不会更改