August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
模板的一个特殊用途是函数对象(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比间接函数调用更有效率。可携带数据和高效这两个特性使得函数对象非常适合用作算法的参数。 ...
Read now
Unlock full access