STL Functors

仿函数其实上就是一个“行为类似函数”的对象。仿函数可以让STL算法有更灵活的演出。
c++11中已经引入lamda表达式,相当于将这部分内容加入了语法。

实现

为实现仿函数,其类别定义中必须自定义(或说改写、重载)function call运算子(operator())。拥有这样的运算子后,我们就可以在仿函数的对象后而加上一对小括号,以此调用仿函数所定义 的operator()。

分类

STL仿函数的分类,若以操作数的个数划分,可分为一元和二元仿函数,若以功能划分,可以为算术运算、关系运算、逻辑运算三在类。

作用

在我们写代码时有时会发现有些功能实现的代码,会不断的在不同的成员函数中用到,但是又不好将这些代码独立出来成为一个类的一个成员函数。但是又很想复用这些代码。写一个公共的函数,可以,这是一个解决方法,不过函数用到的一些变量,就可能成为公共的全局变量,再说为了复用这么一片代码,就要单立出一个函数,也不是很好维护。这时就可以用仿函数了,写一个简单类,除了那些维护一个类的成员函数外,就只是实现一个operator(),在类实例化时,就将要用的,非参数的元素传入类中。这样就免去了对一些公共变量的全局化的维护了。又可以使那些代码独立出来,以便下次复用。而且这些仿函数,还可以用关联,聚合,依赖的类之间的关系,与用到他们的类组合在一起,这样有利于资源的管理(这点可能是它相对于函数最显著的优点了)。

有时仿函数的使用是为了函数拥有类的性质,以达到安全传递函数指针,依据函数生成对象,甚至是让函数之间有继承关系,对函数进行运算和操作的效果。


Si un día te levantas con ganas de estudiar, toma una aspirina y vuelvete a acostar.