C++ 创建一个 header 来解决循环依赖是个好主意吗?

C++ is creating a header to solve circular dependency a good idea?

我有一个开始变大的 C++ 项目。我面临的情况是,我有很多 classes 具有循环依赖性。假设我有 classes A、B、C、D。为了解决这个问题,我创建了一个名为 circular_dep.h[= 的 header 文件12=]

此文件的内容将是指向 classes:

的指针
class A;
class B;
class C;
class D;

这个 header 现在包含在我所有 classes 的 header 中。这样,当我有循环依赖时,编译器就会停止抱怨。但是,每当我向项目添加新的 class 时,我都必须将其添加到 circular_dep.h

我找不到任何更简单的方法来执行此操作,所以对我来说这是迄今为止最好的解决方案。我的问题是:应用于可能面临循环依赖问题的项目是个好主意吗?或者这是一种不好的 design/bad 或危险的做法?

你有的很好。我经常看到的命名后缀是 _fwd.h/_fwd.hpp/_fwd.hxx 或您喜欢的 .h 的任何变体。您可以在 Boost 中看到这一点,例如:optional_fwd.hpp.

(减少循环依赖当然是个好目标,但有些东西本质上是相互递归的,比如文法,所以你别无选择。)