事实:
- 我有两个主要类别:经理和专家。
- 有几种不同类型的专家。
- 专家通常需要其他专家的帮助才能完成工作。
- 经理认识所有的专家,最初每个专家只认识他们的经理。 (这就是问题所在。)
- 在运行时,管理器会创建并存储专家列表。然后 Manager 遍历列表并要求每个专家进行初始化。在初始化期间,每个专家都要求经理向他们提供满足某些描述的其他专家。完成后,经理将进入一个循环,在此期间专家被依次要求执行他们的专业任务。
对我来说,这似乎是一个不错的模式,但由于经理有专家列表,而专家有经理,我遇到了循环依赖问题。
在这种情况下,我应该以某种方式向前声明一个类的存在吗? (如果是这样,如何?)或者我应该使用一些设计模式来解决这个问题? (如果是这样呢?)另外......我虽然模式本身很不错。所以我不介意有人帮助我理解为什么这是一件坏事。
最佳答案
在这两种情况下,前向声明另一个类:
Manager.h
class Specialist;
class Manager
{
std::list<Specialist*> m_specialists;
};
Specialist.h
class Manager;
class Specialist
{
Manager* m_myManager;
};
只有当你需要在该类中使用成员函数或变量,或者需要将类用作值类型等时,才需要为类引入头文件。当你只需要一个指针时或引用类,前向声明就足够了。
请注意,前向声明不仅仅用于解决循环依赖。您应该尽可能使用前向声明。如果可行的话,它们总是比包含一个额外的头文件更可取。
关于c++ - C++ 中的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4018816/