首页 理论教育 成员函数适配器-大道至简:C++STL精解

成员函数适配器-大道至简:C++STL精解

时间:2023-10-25 理论教育 版权反馈
【摘要】:所谓成员函数适配器是一些小型的仿函数类。由此可知,成员函数是面向对象编程与泛型编程之间的桥梁。通常构造仿函数适配器是通过辅助函数,而不是通过构造函数。例13-22例13-22的执行结果为:3.仿mem_fun1_t函数和const_mem_fun1_t仿mem_fun1_t函数<R,X,A>也是一种成员函数适配器。图13-2 例13-23的执行效果4.仿函数mem_fun1_ref_t和const_mem_fun1_ref_t仿mem_fun1_ref_t<R,X,A>函数也是一种成员函数适配器。

成员函数适配器-大道至简:C++STL精解

所谓成员函数适配器是一些小型的仿函数类。它们能够将成员函数作为仿函数来调用。每个适配器均需要一个型别为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

978-7-111-51399-5-Chapter13-77.jpg

978-7-111-51399-5-Chapter13-78.jpg

例13-21的执行结果为:

978-7-111-51399-5-Chapter13-79.jpg

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

978-7-111-51399-5-Chapter13-80.jpg

978-7-111-51399-5-Chapter13-81.jpg

例13-22的执行结果为:

978-7-111-51399-5-Chapter13-82.jpg

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

978-7-111-51399-5-Chapter13-83.jpg

978-7-111-51399-5-Chapter13-84.jpg

978-7-111-51399-5-Chapter13-85.jpg

例13-23的执行效果如图13-2所示。

978-7-111-51399-5-Chapter13-86.jpg

图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

978-7-111-51399-5-Chapter13-87.jpg

978-7-111-51399-5-Chapter13-88.jpg

例13-24的执行结果为:

978-7-111-51399-5-Chapter13-89.jpg

例13-25

978-7-111-51399-5-Chapter13-90.jpg

978-7-111-51399-5-Chapter13-91.jpg

例13-25执行结果为:

978-7-111-51399-5-Chapter13-92.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈