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

结论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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值