条款31:将文件间的编译依存关系降至最低

来源:互联网 发布:淘宝客服这个工作好吗 编辑:程序博客网 时间:2024/05/16 08:03

结论1:支持“编译依存性最小化"的一般构想是:相依于声明式,不要相依于定义式。基于此构想的两个手段是Handle classes 和 Interface classes。

编译依存性最小化的本质:现实中让头文件尽可能自我满足,万一做不到,则让它与其他文件内的声明式(而非定义式)相依,这源自于以下这个简单的设计策略:

1、如果使用object references 或 object pointers 可以完成任务,就不要使用objects。

2、如果能够,尽量以class 声明式替换class 定义式。

3、为声明式和定义式提供不同的头文件。

使用pimpl idiom(pointer to implementation)的classes,被称为Handle classes。

Interface classes即abstract base class,这种class的目的是详细一一描述derived classes的接口,通常不带成员变量,也没有构造函数,只有一个virtual析构函数以及一组pure virtual函数,用来叙述整个接口。为了Interface class的客户可以创建class新对象,通常调用一个特殊函数,此函数扮演”真正将被具现化“的那个derived classes的构造函数角色,这样的函数通常被称为factory函数或virtual构造函数,它们返回指针,指向动态分配所得对象,而该对象支持Interface class的接口,这样的函数往往在Interface class内被声明为static。

结论2:程序库头文件应该以”完全且仅有声明式“的形式存在。这种做法不论是否涉及templates都适用。

0 0
原创粉丝点击