August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
好的抽象都是精心从具体例子发展而来的。试图为每个想象出的需求和技术做好准备来进行“抽象”不是一个好主意。这会导致不优雅的代码和代码膨胀。取而代之,你应该从来自实际应用的一个(最好是多个)具体例子开始,尝试去掉不必要的细节。考虑下面代码:
显然,这是众多数值序列求和方法中的一种。
考虑这段代码在哪些方面不够通用:
·为什么只是int?
·为什么只是vector?
·为什么累加到一个double中?
·为什么从0开始?
·为什么是加法?
通过将具体类型转换为模板实参即可回答前四个问题,于是得到了标准库accumulate算法的最简单形式:
这里,我们有:
·要遍历的数据结构已抽象为一对迭代器,表示一个序列(参见12.1节)。
·累加器的类型已变为一个参数。
·初始值现在已是一个输入。累加器的类型就是这个初始值的类型。
快速的检查或是(更好的)性能测试会显示:用一些数据结构调用这个模板生成的代码等价于手工编码的原始程序生成的代码。例如:
从一段(多段更好)具体代码进行泛化同时又保持性能的过程称为提升(lifting)。相反,设计模板的最佳方法通常是: ...
Read now
Unlock full access