减少文件之间的编译依赖
来源:互联网 发布:travel域名 编辑:程序博客网 时间:2024/05/19 21:15
C++开发中,如果不注意,随便修改一个头文件中的定义,会导致很多引用(indlude)到该头文件的文件重新编译,觉得很浪费时间,所以要尽量减少文件之间的编译依赖。
除了标准库,尽量不要在头文件中直接包含要使用的类的头文件,虽然直接包含头文件对于客户端程序员有方便之处(包含了你的头文件就可以直接使用依赖的东西),但对于大项目,会耗费大量的编译时间,不可取。
使用预先声明(forward declaration)的难点是必须让编译器在编译期间知道它的对象的大小,如果在你的头文件中定义的类成员变量是一个自定义类,最好使用指针来隐藏类细节,这样编译器知道指针的大小。
class Addr; //forward declaration instead of directly include "Addr.h"
class Customer
{
public:
Customer();
private:
Addr* myAddr; //use pointer instead of directly Addr
Date* myLastModified;
};
使用接口(Interface)和工厂方法(factory)是一个较好的方式。就是你只依赖接口头文件,对于具体的实现类,你无须注意。
更详细的论述见: http://develop.csai.cn/c/200604060902171527.htm
除了标准库,尽量不要在头文件中直接包含要使用的类的头文件,虽然直接包含头文件对于客户端程序员有方便之处(包含了你的头文件就可以直接使用依赖的东西),但对于大项目,会耗费大量的编译时间,不可取。
使用预先声明(forward declaration)的难点是必须让编译器在编译期间知道它的对象的大小,如果在你的头文件中定义的类成员变量是一个自定义类,最好使用指针来隐藏类细节,这样编译器知道指针的大小。
class Addr; //forward declaration instead of directly include "Addr.h"
class Customer
{
public:
Customer();
private:
Addr* myAddr; //use pointer instead of directly Addr
Date* myLastModified;
};
用对类声明的依赖替代对类定义的依赖是减少编译依赖的原则。你声明一个使用一个类的函数时绝对不需要有这个类的定义,即使这个函数通过传值方式传递或返回这个类。
class Date; // class declaration
Date today(); // fine - no definition
void setLastModified(Date d); //fine
使用接口(Interface)和工厂方法(factory)是一个较好的方式。就是你只依赖接口头文件,对于具体的实现类,你无须注意。
更详细的论述见: http://develop.csai.cn/c/200604060902171527.htm
- 减少文件之间的编译依赖
- 减少编译时源文件之间的依赖
- 减少文件间的编译依赖
- 编写高质量的C++代码--01 减少文件之间的编译依赖
- 最小化文件之间的编译依赖
- 最小化文件之间的编译依赖
- 最小化文件之间的 compilation dependencies(编译依赖)
- C++箴言:最小化文件之间的编译依赖
- 将文件之间的编译依赖关系降至最低
- Item 31 减小文件之间的编译依赖
- C++箴言:最小化文件之间的编译依赖
- 减少编译时依赖的意义和一些惯用法
- Item 31:最小化文件之间的编译依赖 Effective C++笔记
- 类之间的依赖关系对编译的影响.
- [翻译] Effective C++, 3rd Edition, Item 31: 最小化文件之间的 compilation dependencies(编译依赖)(上)
- [翻译] Effective C++, 3rd Edition, Item 31: 最小化文件之间的 compilation dependencies(编译依赖)(下)
- 显式编写空析构函数以减少编译依赖
- C++的前置声明与Exceptional C++中减少编译时依赖的意义和一些惯用法
- java面试题[基础类]
- asp.net 2.0中用GRIDVIEW插入新记录
- java面试题[应用类]
- java面试题[其他类]
- 各厂家内存编号的含义
- 减少文件之间的编译依赖
- Spring AOP处理日志
- 什么是Web 2.0?
- spring aop的另外一种实现
- ajax in action——javascript面向对象编程(上)
- 取得远程文件并保存到本地
- Spring aop实现事务加锁
- Learn Linux
- 关于C++指针的研究