C++编程规范中第23条中说:
If one header file won't work unless the file that includes it also includes another header, that's gauche and puts unnecessary burden on that header file's users.
呵呵,英语有点拗口,后面举的例子也都是模板的例子。我倒是遇到过一个实际的例子,简化后如下:
//a.h
class A
{
int a;
};
//b.h
//注意:b.h并没有include a.h
class B
{
A a;
};
用的时候怎么用呢?比如在main.cpp中想用class B
//main.cpp
#include "a.h"
#include "b.h"
//
B b;
//
//do something on b 可以看到,main为了使用B,还得包含a.h,这就是上面一段英语说的:
如果一个头文件(b.h)不能工作,除非包含它(b.h)的文件(也就是main.cpp)也包含另一个头文件(a.h)...
hehe,当我第一次遇到这种情况时,想了半天也想不明白为什么我明明包含了b.h还是不能用B啊
那么,正确的写法应该是什么呢?
在类B的作者在设计B的时候,就应该想到用户只需要#include "b.h"就可以使用这个class B。所以,在b.h文件中,应该写明#include "a.h",而不是让用户在main.cpp中去include "a.h"
:)