成员函数的函数配接器

在STL标准库中除了提供常规的函数配接器外,还提供了两个针对成员函数的函数配接器,其主要功能是通过这些配接器,你可以针对每一个元素直接去调用其成员函数。

这样的成员函数配接器有两个,分别是:

mem_fun_ref(op)
调用对象的成员函数op

mem_fun(op)
调用对象指针的成员函数op

这两个函数配接器都是去调用对象中的成员函数op,对于这两个成员函数,以前是只能调用对象的const成员函数,但现在的情况好像有所改变,对所有的成员函数都可以调用了。

具体的示例如下:

#include<iostream>
#include<functional>
#include<deque>
#include<algorithm>
#include<iterator>
using namespace std;

class A
{
public:
	A(int b):a(b){}
	~A(){}
	void mfun()
	{
		ostream_iterator<int>(cout,"--") = ++a;
	}
private:
	int a;
};
int main()
{
	deque<A>de;
	for(int i = 0;i<5;i++)
		de.push_back(A(i));
	for_each(de.begin(),de.end(),mem_fun_ref(&A::mfun));
	cout<<endl;
	deque<A*>de2;
	for(int i = 0;i<5;i++)
		de2.push_back(new A(i));
	for_each(de2.begin(),de2.end(),mem_fun(&A::mfun));
	/*
	1--2--3--4--5--
	1--2--3--4--5--请按任意键继续. . .
	*/
}

使用注意:

一、通过该类配接器调用的成员函数必须要在对象的类型中存在。

二、这两个配接器的参数都必须是传递该类型中成员函数的偏移量,不能直接传递函数名。

成员函数的函数配接器

时间: 2024-10-25 23:37:32

成员函数的函数配接器的相关文章

C++函数配接器

一.概述 配接器(adaptor)在STL组件的灵活运用功能上,扮演着轴承.转换器的角色,将一种容器或迭代器装换或封装成另一种容器或迭代器.adaptor这个概念,实际上是一种设计模式,其定义如下: 将一个class的接口转换为另一个class的接口,使原本因接口不兼容而不能合作的classes,可以一起运作. 配接器按功能可以分为如下3类: 可以改变函数或仿函数接口的适配器,称为仿函数适配器: 针对容器的适配器,称为容器适配器: 针对迭代器的适配器,称为迭代器适配器. 本博客只介绍仿函数适配器

函数配接器

bind1st(op,value) ----> op(value,param)     //绑定op的第一个参数 bind2st(op,value) ----> op(param,value) not1(op) ---->!op(param) not2(op) ---->!op(param1,param2) 注:其中的bind相关参考boost库中bind内容 int func1(int p1,int p2 ){ cout<<"p1 = "<&

仿函数和函数配接器

// // main.cpp // function_adaptor // // Created by IDM-PKU on 14-9-3. // Copyright (c) 2014年 PKU. All rights reserved. // #include <iostream> #include <set> #include <deque> #include <algorithm> #include "print.hpp" usin

python描述符、property、函数(类)装饰器实例解析

1 import sys 2 3 ''' 4 当使用实例对象访问属性时,都会调用__getattribute__内建函数 5 __getattribute__查找属性的优先级 6 1.类属性 7 2.数据描述符 8 3.实例属性 9 4.非数据描述符 10 5.__getattr__() 11 12 #实例.属性 13 c.x ==>type(x).__dict__['x'].__get__(x,type(x)) 14 #类.属性 15 C.x ==>X.__dict__['x'].__get

C++:运算符重载函数之成员运算符重载函数

5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式如下: 函数类型 operator 运算符(形参表) {       函数体 } (2)成员运算符重载函数也可以在类中声明成员函数的原型,在类外定义. 在类的内部,声明成员运算符重载函数原型的格式如下: class X{      ...      函数类型 operator运算符(参数表); };

Day 19 函数之闭包、装饰器

一.什么是装饰器 器即函数 装饰即修饰,意指为其他函数添加新功能 装饰器定义:本质就是函数,功能是为其他函数添加新功能 二.装饰器遵循的原则 1.不修改被装饰函数的源代码(开放封闭原则) 2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式 三.高阶函数 高阶函数总结 1.函数接收的参数是一个函数名 作用:在不修改函数源代码的前提下,为函数添加新功能, 不足:会改变函数的调用方式 2.函数的返回值是一个函数名 作用:不修改函数的调用方式 不足:不能添加新功能 其.程序: work: #! /

闭包函数、无参装饰器2

一.闭包函数 闭包函数:函数内部定义函数,成为内部函数.该内部函数包含对外部作用域,而不是对全局作用域名字的引用,那么该内部函数成为闭包函数. name='alex' #定义全局变量name='alex' def func(): name='egon' #定义局部变量name='egon' def bar(): print(name) return bar #返回bar函数名 b=func() #执行func()结果为bar的函数名 相当于b=bar name='haha' #重新定义全局变量n

【转载】C/C++杂记:深入理解数据成员指针、函数成员指针

原文:C/C++杂记:深入理解数据成员指针.函数成员指针 1. 数据成员指针 对于普通指针变量来说,其值是它所指向的地址,0表示空指针.而对于数据成员指针变量来说,其值是数据成员所在地址相对于对象起始地址的偏移值,空指针用-1表示.例: 代码示例:   2. 函数成员指针 函数成员指针与普通函数指针相比,其size为普通函数指针的两倍(x64下为16字节),分为:ptr和adj两部分. (1) 非虚函数成员指针 ptr部分内容为函数指针(指向一个全局函数,该函数的第一个参数为this指针),ad

闭包函数、无参装饰器

闭包函数:函数内部定义函数,成为内部函数.该内部函数包含对外部作用域,而不是对全局作用域名字的引用,那么该内部函数成为闭包函数. name='alex' #定义全局变量name='alex' def func(): name='egon' #定义局部变量name='egon' def bar(): print(name) return bar #返回bar函数名 b=func() #执行func()结果为bar的函数名 相当于b=bar name='haha' #重新定义全局变量name='ha