C++ 具有公共访问权限的成员指针的转发声明
与被问到的情况有些相似 我有一个类a,它有一个指向类B的成员指针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.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.中包含它,然后还有一个可能很可怕的选项,将其放在预编译的头中。。。