经常发现,在需要重用一个头文件而包含它时,编译器抱怨很多东西找不到。原因是头文件里直接或者间接的依赖了太多的东西。如何避免或者减轻头文件的依赖,我学习到了几点:
2. 尽量使用指针和引用类型,然后用前置声明;
3. 把实现相关的数据和方法放到cpp文件中(参照在类的头文件中隐藏私有数据)
比如:
// example.h
#include <QObject>
class QTimer;
class MyObject : public QObject
{
public:
void init();
void start();
...
QTimer& timer();
private:
class Private;
Private &_d;
};
这样基本上可以放心的包含你的头文件。
在cpp文件中一般把对应头文件放在最前面,这样可以及时发现头文件是否真的没有了其他的依赖。实现中需要的其他头文件一次排在后头。
对于使用该头文件的模块的人来说,只要包该头文件,以及用到的接口里的数据类型的头文件就可以了。
// user1.cpp
#include "example.h"
void funcA()
{
MyObject obj;
obj.start();
}
// user2.cpp
#include "example.h"
#include <QTimer>
void funcB()
{
MyObject obj;
obj.timer().start();
}