经常发现,在需要重用一个头文件而包含它时,编译器抱怨很多东西找不到。原因是头文件里直接或者间接的依赖了太多的东西。如何避免或者减轻头文件的依赖,我学习到了几点:


1. 只包含父类的头文件;

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();

}