c++ - 如何消除这种循环依赖?
问题描述
我想做什么?
我正在尝试制作游戏。我决定让所有的经理向下层级传递,而不是拥有全球的“经理”。我的计划是制作“应用程序”类,它将包含所有“管理器”对象,如窗口、资产管理器等……然后应用程序将其引用传递给 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();
}
是否可以删除循环引用并且仍然有这种“传递经理”?你会怎么做?
解决方案
您可以“前向声明”头文件中的类。
class Application;
而不是完整的#include
. 您将需要#include
cpp 文件中的 (或者实际上在您对前向声明的类执行任何操作之前)。
推荐阅读
- docker - 无法让 dep 和 dockerize 在 docker-compose 中一起工作(但它们分开工作)。为什么?
- python - 停止VTK定时器回调
- mysql - sql中的多级查询
- .net - 如何在 Linux (RHEL) 上离线安装 .NET Core 和 SDK?
- sql-server-2008 - Login failed for user 'sa' and Pipes Error
- c# - How to integration test an Asp.Net Core client app that relies on independent Asp.Net Core Api
- php - 使用 Python 发布信息刷新网站或使用 Python 在现有选项卡中打开其他链接
- regex - 使用正则表达式匹配数组中不包含任何内容的所有内容
- angular - How to exclude a component from build process depending on env. variable?'
- spring-boot - Log4j2 - Unrecognized conversion specifier [xwEx] starting at position 160 in conversion pattern