GotW #07 Compile-Time Dependencies
著者:Herb Sutter
翻译:kingofark
[声明]:本文内容取自www.gotw.ca网站上的Guru of the Week栏目,其著作权归原著者本人所有。译者kingofark在未经原著者本人同意的情况下翻译本文。本翻译内容仅供自学和参考用,请所有阅读过本文的人不要擅自转载、传播本翻译内容;下载本翻译内容的人请在阅读浏览后,立即删除其备份。译者kingofark对违反上述两条原则的人不负任何责任。特此声明。
Revision 1.0
Guru of the Week 条款07:编译期的依赖性
难度:7 / 10
(大多数程序员使用#include包含的头文件都比实际需要的多。你也是这样的吗?想知道的话,请看本条款。)
[问题]
[注意:这个问题比想象的还要难!下面程序中的注释都是非常有用的。]
大多数程序员使用#include包含的头文件都比实际需要的要多。这会严重的影响并延长程序的建立时间(build time),特别是当一个被频繁使用的头文件中包含了太多其它的头文件的时候,问题越发严重。
首先,在下面的头文件当中,有哪些#include语句可以在不对程序产生副作用的情况下被直接去掉?其次,还有哪些#include语句可以在对程序进行适当的修改之后被去掉?程序将如何修改?(你不能改变X类和Y类的公共接口;也就是说,你对这个头文件所作的任何修改都不能影响调用它的代码)。
// gotw007.h (implementation file is gotw007.cpp)
//
#include "a.h" // class A
#include "b.h" // class B
#include "c.h" // class C
#include "d.h" // class D
// (注意: 只有A和C有虚拟函数(virtual functions))
#include <iostream>
#include <ostream>
#include <sstream>
#include <list>
#include <string>
class X : public A {
public:
X ( const C& );
D Function1( int, char* );
D Function1( int, C );
B& Function2( B );
void Function3( std::wostringstream& );
std::ostream& print( std::ostream& ) const;
private:
std::string name_;
std::list<C> clist_;
D d_;
};
std::ostream& operator<<( std::ostream& os, const X& x )
{ return x.print(os); }
class Y : private B {
public:
C Function4( A );
private:
std::list<std::wostringstream*> alist_;
};
[解答]