C++編程規(guī)范中第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.
呵呵,英語有點(diǎn)拗口,后面舉的例子也都是模板的例子。我倒是遇到過一個(gè)實(shí)際的例子,簡化后如下:
//a.h
class?A?
{
?int?a;
};
?
//b.h
//注意:b.h并沒有include?a.h
class?B?
{
?A?a;
};?
用的時(shí)候怎么用呢?比如在main.cpp中想用class B
//main.cpp
#include?"a.h"
#include?"b.h"
//
B?b;
//
//do?something?on?b 可以看到,main為了使用B,還得包含a.h,這就是上面一段英語說的:
如果一個(gè)頭文件(b.h)不能工作,除非包含它(b.h)的文件(也就是main.cpp)也包含另一個(gè)頭文件(a.h)...
hehe,當(dāng)我第一次遇到這種情況時(shí),想了半天也想不明白為什么我明明包含了b.h還是不能用B啊
那么,正確的寫法應(yīng)該是什么呢?
在類B的作者在設(shè)計(jì)B的時(shí)候,就應(yīng)該想到用戶只需要#include "b.h"就可以使用這個(gè)class B。所以,在b.h文件中,應(yīng)該寫明#include "a.h",而不是讓用戶在main.cpp中去include "a.h"
:)