所谓成员函数适配器是一些小型的仿函数类。它们能够将成员函数作为仿函数来调用。每个适配器均需要一个型别为T∗或T&的参数。通过该参数调用T类的成员函数。由此可知,成员函数是面向对象编程与泛型编程之间的桥梁。
无论是标准库,还是程序员自定义类的成员函数,其数量是巨大的。通常构造仿函数适配器是通过辅助函数,而不是通过构造函数。最普遍使用的两个辅助函数是:mem_fun()和mem_fun_ref()。
1.mem_fun_t()和const_mem_fun_t()函数
类mem_fun_t是一种成员函数适配器,和所有仿函数具有同样的特点:拥有一个opera-tor()函数,使得mem_fun_t()可用一般的函数调用语法被调用。通常情况下,类mem_fun_t的operator()函数接受型别T∗的参数。
和其他适配器一样,直接使用类mem_fun_t的构造函数是不方便的,但可以使用辅助mem_fun()函数来代替之。
使用仿函数memfunt时,需要包含头文件<functional>。仿函数的基类为:unary_function<T∗,R>
仿函数const_mem_fun_t和仿函数mem_fun_t大体相似。
例13-21
例13-21的执行结果为:
2.仿函数mem_fun_ref_t和const_mem_fun_ref_t
仿函数mem_fun_ref_t<R,X>也是一种成员函数适配器。若X是类,且具有成员函数RX::f(),那么仿函数mem_fun_ref_t<R,X>是一个仿函数适配器,就可以方便地以一般函数的形式来调用f()。在使用该仿函数时,同样需要包含头文件<functional>,在实际使用过程中,通常会以辅助mem_fun_ref()函数代替它。
const_mem_fun_ref_t和mem_fun_ref_t大体近似。
例13-22
例13-22的执行结果为:
3.仿mem_fun1_t函数和const_mem_fun1_t
仿mem_fun1_t函数<R,X,A>也是一种成员函数适配器。若X是类,且具有成员函数RX::f(A),那么mem_fun1_t<R,X,A>即是一种仿函数适配器,从而可以像一般函数那样来调用f()函数。仿mem_fun1_t函数需要两个参数:第一个参数型别为X∗,第二个参数型别为A。由于仿mem_fun1_t函数的构造器不便于使用,通常以辅助mem_fun()函数代替之。(www.xing528.com)
const_mem_fun1_t和mem_fun1_t大体相似。
例13-23
例13-23的执行效果如图13-2所示。
图13-2 例13-23的执行效果
4.仿函数mem_fun1_ref_t和const_mem_fun1_ref_t
仿mem_fun1_ref_t<R,X,A>函数也是一种成员函数适配器。若X是类,且具有成员函数RX::f(A);那么mem_fun1_ref_t<R,X,A>即是一个仿函数适配器,从而可以一般函数的形式来调用f()。作为仿函数,mem_fun1_ref_t需要两个参数:第一个参数型别为X&,第二个参数的型别为A。通常使用辅助mem_fun_ref()函数代替使用其构造器的方式。
仿函数const_mem_fun1_ref_t和mem_fun1_ref_t大体相似。
例13-24
例13-24的执行结果为:
例13-25
例13-25执行结果为:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。