C++ 具有公共访问权限的成员指针的转发声明

C++ 具有公共访问权限的成员指针的转发声明,c++,forward-declaration,C++,Forward Declaration,与被问到的情况有些相似 我有一个类a,它有一个指向类B的成员指针 //A.h class B; class A { B *b; public: B *GetB(); }; B在其自己的文件中定义 现在,每当我包含A.h并希望访问A的b成员时,我也必须包含b.h。在A和b都有相当大的头的情况下(想想旧的讨厌的遗留代码),当我包含一个或时,继续包含两个头是不是更好 头文件非常大,但我们的大多数代码都需要这两个文件,我只是好奇,在这种情况下,是否有某种设计模式决定了最好的决策 使用

与被问到的情况有些相似

我有一个类a,它有一个指向类B的成员指针

//A.h
class B;
class A {
    B *b;
public: 
    B *GetB();
};
B在其自己的文件中定义

现在,每当我包含A.h并希望访问A的b成员时,我也必须包含b.h。在A和b都有相当大的头的情况下(想想旧的讨厌的遗留代码),当我包含一个时,继续包含两个头是不是更好


头文件非常大,但我们的大多数代码都需要这两个文件,我只是好奇,在这种情况下,是否有某种设计模式决定了最好的决策

使用预处理器包装头文件,以确保头文件只包含一次

B.h
define上

#ifndef __B_HEADER__
#define __B_HEADER__

.... B header files goes here....

#endif
#ifndef __A_HEADER__
#define __A_HEADER__

#include <B.h>

.... A header files goes here....

#endif
然后在
A.h
define上

#ifndef __B_HEADER__
#define __B_HEADER__

.... B header files goes here....

#endif
#ifndef __A_HEADER__
#define __A_HEADER__

#include <B.h>

.... A header files goes here....

#endif
\ifndef\uu头__
#定义一个标题__
#包括
.... 头文件放在这里。。。。
#恩迪夫
然后在需要时仅包括
A.h

我个人更喜欢包含我所知道的和想要使用的头文件——我不想被我使用的组件的Dependency树所困扰


当你在C++ STD库中包含<代码> <代码>时,你真的想知道并明确地包含所有的<代码> <代码>依赖关系(如果有的话)?

< p>当然,这是意见。对我来说,这归结为使用A而不使用B是否有意义。如果A有大量的操作,其中只有一个涉及B,那么不,我不会包括B.h。为什么只调用A.Foo()和A.Bar()的人需要支付包括额外头的开销

另一方面,如果A是一个B工厂(例如),你无法想象有人使用它而不使用B,那么在A.h中包含B.h可能是有意义的

如果A有一个类型为B(不是B*)的成员变量,其结果是任何包含A.h的人都必须包含B.h才能进行编译,那么我肯定会将其包含在A.h中。

这里没有无条件的“最佳”,就像在大多数情况下一样。如果“最佳”意味着“最快的编译时间”,那么最好是手动将B.h包含在所有需要它的TU中。如果“best”意味着“以最快的方式摆脱此任务”,那么请从A.h.中包含它,然后还有一个可能很可怕的选项,将其放在预编译的头中。。。