Skip to Content
C++语言导学(原书第2版)
book

C++语言导学(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
Pearson
Content preview from C++语言导学(原书第2版)

7.3.2 使用模板抽象

好的抽象都是精心从具体例子发展而来的。试图为每个想象出的需求和技术做好准备来进行“抽象”不是一个好主意。这会导致不优雅的代码和代码膨胀。取而代之,你应该从来自实际应用的一个(最好是多个)具体例子开始,尝试去掉不必要的细节。考虑下面代码:

显然,这是众多数值序列求和方法中的一种。

考虑这段代码在哪些方面不够通用:

·为什么只是int?

·为什么只是vector?

·为什么累加到一个double中?

·为什么从0开始?

·为什么是加法?

通过将具体类型转换为模板实参即可回答前四个问题,于是得到了标准库accumulate算法的最简单形式:

这里,我们有:

·要遍历的数据结构已抽象为一对迭代器,表示一个序列(参见12.1节)。

·累加器的类型已变为一个参数。

·初始值现在已是一个输入。累加器的类型就是这个初始值的类型。

快速的检查或是(更好的)性能测试会显示:用一些数据结构调用这个模板生成的代码等价于手工编码的原始程序生成的代码。例如:

从一段(多段更好)具体代码进行泛化同时又保持性能的过程称为提升(lifting)。相反,设计模板的最佳方法通常是: ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

软件开发实践:项目驱动式的Java开发指南

软件开发实践:项目驱动式的Java开发指南

Raoul-Gabriel Urma, Richard Warburton
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Python机器学习案例精解

Python机器学习案例精解

Posts & Telecom Press, Yuxi (Hayden) Liu

Publisher Resources

ISBN: 9787111633280