具有公共访问权限的成员指针的前向声明
Forward declaration for member pointer with public access
与这里的问题有点类似。
我有一个类a,它有一个指向类b的成员指针
//A.h
class B;
class A {
B *b;
public:
B *GetB();
};
B在它自己的文件中定义。
现在,每当我包含A.h并想要访问A的b成员时,我也必须包括B.h。在A和b都有相当大的头文件的情况下(想想旧的讨厌的遗留代码),当我包含一个或时,是否更好地继续包括两个头文件,只是让A.h包含B.h并完成它?
标题是相当大的,但我们的大部分代码都需要,我只是好奇,如果有某种设计模式,决定什么是最好的决定,在这种情况下做出。
当然,这只是个人意见。对我来说,这归结为使用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中包含它。
用预处理器包装头文件,以确保它们只被包含一次。
on B.h
define
#ifndef __B_HEADER__
#define __B_HEADER__
.... B header files goes here....
#endif
then on A.h
define
#ifndef __A_HEADER__
#define __A_HEADER__
#include <B.h>
.... A header files goes here....
#endif
,然后在需要时只包括A.h
。
我个人更喜欢包含我知道和想要使用的头文件-我不想被我使用的组件的依赖树所困扰。
认为当你在c++ STD库中包含<iostream>
时-你真的想知道并显式包含所有<iostrem>
依赖关系(如果有的话)吗?
相关文章:
- 从成员指针到整个结构/类的强制转换
- OOP 中的单成员指针
- 使用结构成员指针在C++中填充结构
- 聚合初始化,将成员指针设置为同一结构成员
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 共享 C++ 的数据成员指针
- 如何声明指向成员内容的成员指针m_pmd/m_pmf并访问它们?
- 从类C++外部调用指向成员方法的成员指针
- 结构成员指针是否自动初始化为零?
- 如何删除类内类类型的类成员指针
- 是否打印指向已定义 int 的成员指针
- 指向常量的成员指针
- 通过此指针访问时的成员差异和自身的成员指针(简单的 QT 示例问题)
- 类数据成员指针的非类型模板参数包无法使用 gcc 编译
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 将类成员指针传递给 Lambda 捕获列表 c++11
- 在单一实例类中将成员指针设置为 null 的正确方法是什么
- 无法删除在destructor中的成员指针的课程
- 删除对象而不调用成员指针的析构函数
- 当派生类的基类具有成员指针时,对其进行深层复制