首页 > 解决方案 > 如何消除这种循环依赖?

问题描述

我想做什么?

我正在尝试制作游戏。我决定让所有的经理向下层级传递,而不是拥有全球的“经理”。我的计划是制作“应用程序”类,它将包含所有“管理器”对象,如窗口、资产管理器等……然后应用程序将其引用传递给 SceneManager,场景管理器将应用程序引用传递给场景,然后场景传递它到 GameObjects,因此可以从任何层次结构中调用任何经理。

问题是,我的应用程序拥有 SceneManager。而SceneManager 需要将Application 引用传递给Scene。

图表:

图表

代码:(简体)

应用:

应用程序依赖于 SceneManager,因为它需要持有并更新它。

#include "SceneManager"
class Application {
  public:
    SceneManager& getSceneManager();
    void update();
    void quit();
enter code here
  private:
    SceneManager sceneManager;
    // Input, Window, Asset loaders etc
};

场景管理器:

SceneManager 依赖于 Application,因为它需要将 Application 引用传递给当前 Scene。

#include "Application"
class SceneManager {
  public:
    void updateCurrentScene(Application& application);
    // Handling scene switching etc.
enter code here
  private:
    Scene currentScene;
};

然后在场景中可以:

void onUpdate(Application& application) {
    application.getSceneManager().doSomething();
}

是否可以删除循环引用并且仍然有这种“传递经理”?你会怎么做?

标签: c++architecture

解决方案


您可以“前向声明”头文件中的类。

class Application;

而不是完整的#include. 您将需要#includecpp 文件中的 (或者实际上在您对前向声明的类执行任何操作之前)。


推荐阅读