这个技巧可以降低编译依赖
A.h
#ifndef A_H // 一定要加这个否则重复展开导致错误
#define A_H
#include "B.h"
class ID::IDPimp{ // 类内声明,类外定义,防止直接访问实现细节
public:
void print()
{
cout << "真正的实现" <<endl;
}
}
#endif
B.h
#ifndef B_H
#include "A.h"
class ID {
public:
void print()
{
pimp -> print();
}
ID()
{
pimp = new IDPimp();
}
~ ID()
{
delete pimp;
}
private:
class IDPimp; // 声明
IDPimp pimp;
}
#endif
A.H
#ifndef A_H
#define A_H
class ID{
public:
void print()
{
cout << "AAAA"<<endl;
}
// int _a;
};
#endif
#ifndef B_H
#define B_H
class PeoPleID:public ID{
public:
void print()
{
ID::print();
}
}
这样设计就可以减少编译依赖。试想如果ID类的内部实现没有跟ID分离开来,如果有个类继承或者使用了ID类,使用到ID类的这个头文件也需要重新编译。(如B.h)
如果我们使用Pimp 方法,首先使用到ID类的肯定不用编译,ID类也不用编译,只要编译IDPimp类就行,然后跟它们重新链接。