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版)

6.3.2 函数对象

模板的一个特殊用途是函数对象(function object),有时也称为函子(functor),用这种机制定义的对象可以像函数一样调用。例如:

其中,名为operator()的函数实现了“函数调用”或者称为“调用”或“应用”运算符()。

可以为某些参数类型定义Less_than类型的命名变量:

接下来,就能像调用函数一样调用这种对象了:

这样的函数对象经常作为算法的参数出现。例如,可以像下面这样统计有多少个值令谓词返回true:

我们可以调用谓词(predicate),其返回值是true或false。例如:

其中,Less_than{x}构造了一个Less_than<int>类型的对象,调用它将与名为x的int比较,而Less_than{s}构造的对象则与名为s的string比较。函数对象的精妙之处在于它们携带着准备与之比较的值。我们无须为每个值(以及每种类型)单独编写函数,更不必将值保存在令人讨厌的全局变量中。而且,像Less_than这样的简单函数对象很容易内联,因此调用Less_than比间接函数调用更有效率。可携带数据和高效这两个特性使得函数对象非常适合用作算法的参数。 ...

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