问题:
在一个头文件中引用了其他头文件中的多个类,并想减少编译依赖。
方案:
使用前置类声明来避免不必要的编译依赖。
//myheader.h
#ifndef MYHEADER_H_
#define MYHEADER_H_
class A; //此处不需要include类A的头文件
class B{
public:
void f(const A& a);
//...
private:
A *a_;
};
#endif
尽管在其他地方定义和声明了类A的细节,但是此处并不需要知道其细节,只需知道A为一个类即可。
值得注意的是,前置类声明并不能一直使用,在上面的例子中,类B仅仅使用了类A的指针或者引用,才可以使用前置类声明,如果使用了类A的成员函数或者变量,则需要使用#include包括其头文件,而不是使用前置类声明。
食谱2.4 使用名字空间来防止名称冲突
问题:同一工程中多个模块有可能有命名冲突,或者防患于未然。
方案:
使用名字空间去模块化代码。比如标准库使用了std名字空间。
没有评论:
发表评论