Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;创建一个标题来解决循环依赖是一个好主意吗? 我有一个C++项目,它开始变得庞大起来。我面临的情况是,我有很多类具有循环依赖关系。假设我有A、B、C、D类。为了解决这个问题,我创建了一个名为circular\u dep.h_C++_Header Files_Circular Dependency - Fatal编程技术网

C++;创建一个标题来解决循环依赖是一个好主意吗? 我有一个C++项目,它开始变得庞大起来。我面临的情况是,我有很多类具有循环依赖关系。假设我有A、B、C、D类。为了解决这个问题,我创建了一个名为circular\u dep.h

C++;创建一个标题来解决循环依赖是一个好主意吗? 我有一个C++项目,它开始变得庞大起来。我面临的情况是,我有很多类具有循环依赖关系。假设我有A、B、C、D类。为了解决这个问题,我创建了一个名为circular\u dep.h,c++,header-files,circular-dependency,C++,Header Files,Circular Dependency,此文件的内容将是指向类的指针: class A; class B; class C; class D; 现在我的所有类的标题都包含了这个标题。这样,当我有循环依赖时,编译器就不再抱怨了。但是,每当我向项目中添加一个新类时,我都必须将其添加到循环\u dep.h 我找不到更简单的方法,所以对我来说这是目前为止最好的解决方案。我的问题是:应用于可能面临循环依赖问题的项目是一个好主意吗?或者这是一个糟糕的设计/糟糕的或危险的做法?你所拥有的一切都很好。我经常看到的命名后缀是\u fwd.h/\u f

此文件的内容将是指向类的指针:

class A;
class B;
class C;
class D;
现在我的所有类的标题都包含了这个标题。这样,当我有循环依赖时,编译器就不再抱怨了。但是,每当我向项目中添加一个新类时,我都必须将其添加到循环\u dep.h


我找不到更简单的方法,所以对我来说这是目前为止最好的解决方案。我的问题是:应用于可能面临循环依赖问题的项目是一个好主意吗?或者这是一个糟糕的设计/糟糕的或危险的做法?

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


(当然,减少循环依赖是一个很好的目标,但有些东西本质上是相互递归的,比如语法,因此您别无选择。)

最好同时避免循环引用。您最好询问如何重新构造代码,以便一开始就不需要它们。还要注意,您显示的头文件不包含指针,而是类的(正向)声明。我的首选是在需要它们的头文件中只包含单个类的正向引用。但这只是一种偏好。不将所有内容放在一个标题中的一个原因是为了避免在添加类时必须重新编译所有内容。在我看来,某些情况可能是不可避免的。例如,我正在为一种看起来像C的简单语言编写一个编译器。一个函数有一个块(在{和}之间的任何东西)。块有变量声明和命令(如“if”),命令可能有块(“if”可能有块)。因此,我们在命令和块之间有一个circ dep问题,这些不是类的指针。它们是类的前向声明。我看不出有什么理由为它创建另一个头文件,因为您可以在需要时编写转发声明本身。