c++ - 具有公共(public)访问权限的成员指针的前向声明

标签 c++ forward-declaration

与所问情况有些相似here .

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

//A.h
class B;
class A {
    B *b;
public: 
    B *GetB();
};

B 在它自己的文件中定义。

现在,每当我包含 A.h 并想访问 A 的 b 成员时,我还必须包含 B.h。在 A 和 B 都有相当大的 header 的情况下(想想旧的令人讨厌的遗留代码),当我包含一个 时最好继续包含两个 header ,只让 A.h 包含 B.h 并完成它?

header 非常大,但无论如何我们的大部分代码都需要两者,我只是好奇是否有某种设计模式可以决定在这种情况下做出的最佳决定。

最佳答案

当然,这是意见。对我来说,它归结为在没有 B 的情况下使用 A 是否有意义。如果 A 有大量操作并且其中只有一个涉及 B,那么不,我不会包括 B.h。为什么只调用 A.Foo() 和 A.Bar() 的人需要支付包含额外 header 的开销?

另一方面,如果 A 是 B 工厂(例如)并且您无法想象有人使用它而不使用 B,那么将 B.h 包含在 A.h 中也许是有意义的。

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

关于c++ - 具有公共(public)访问权限的成员指针的前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23678747/

相关文章:

c++ - 前向声明的替代方案 : two classes using each other

c++ - 使用c++ STL的多维 vector 求解

c++ - 如何在 OpenGL 中创建深度淡入淡出效果?

swift - 将 'ClassName' 重新定义为生成 header 中的不同类型符号

c++ - 两个单独文件中另一个类的类方法 friend

C: 前向声明一个 typedef,稍后定义用于现在声明一个函数

c++ - 什么时候必须声明模板中使用的函数?

c++ - 推断 "make_function"的 lambda 或任意可调用对象的调用签名

c++ - 在 c++0x 中删除 nullptr 是否仍然安全?

c++ - 用 C++ 计算文件行数的最简洁方法