我想制作两个类:一个对象和一个 object_manager,但我对它们应该如何看待/包含彼此感到困惑。我听说禁止两个 header 相互包含,如果我的代码依赖项有圆圈那么它是一个糟糕的代码设计,通常它应该像一个层次结构(town->house->furniture 和 furniture 不应该知道关于城镇的存在)。
但这里我有一个 object_manager,它知道并保存所有对象,对象应该可以选择创建新对象,但是他们应该调用 object_manager,这将迫使他们知道它的存在,这将创建一个结构中的圆圈,这是不好的。
这就像一个进程想要通过调用 OS 系统调用来创建一个新进程,因此 OS 和进程相互了解。
有没有一种方法可以让我在正确的代码设计中实现这一点,或者有时它应该很糟糕?
我想也许对象应该有一个特殊的地方来存储它们所有的“系统调用”,object_manager 会不时检查它,但也许有更好的方法。
最佳答案
使用前向声明:
class ObjectManager;
class Object
{
private:
ObjectManager* m_objManager;
....
public:
....
};
在 .cpp 文件中,您可以包含 ObjectManager.h 此外,不要创建 ObjectManager,而是创建接口(interface),这将为您提供更多实现 IObjectManager 的抽象。
关于C++ 对象层次结构——如何管理循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7855398/