在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--请按任意键继续. . . */ }
一、通过该类配接器调用的成员函数必须要在对象的类型中存在。
二、这两个配接器的参数都必须是传递该类型中成员函数的偏移量,不能直接传递函数名。
原文:http://blog.csdn.net/yyc1023/article/details/38500089