40 lines
1.0 KiB
C++
40 lines
1.0 KiB
C++
// mem_fn 有两个重载版本:
|
||
// 用法1:mem_fn(&MyClass::printMessage) 用于将成员函数转换为函数对象
|
||
// 用法2:mem_fn(&MyClass::printMessage)(&obj, "hello world") 用于调用成员函数
|
||
// mem_fn 是一个函数模板,它接受一个成员函数指针或成员函数引用,并返回一个函数对象,该对象可以调用相应的成员函数。
|
||
#include <iostream>
|
||
#include <vector>
|
||
#include <algorithm>
|
||
|
||
using namespace std;
|
||
|
||
class Stu
|
||
{
|
||
private:
|
||
string name;
|
||
int age;
|
||
|
||
public:
|
||
Stu(const string &name, int age) : name(name), age(age) {}
|
||
|
||
public:
|
||
void show()
|
||
{
|
||
cout << "name is " << name << ", age is " << age << endl;
|
||
}
|
||
};
|
||
|
||
int main()
|
||
{
|
||
vector<Stu> vs;
|
||
vs.push_back(Stu("disen", 18));
|
||
vs.push_back(Stu("lucy", 20));
|
||
vs.push_back(Stu("jack", 15));
|
||
vs.push_back(Stu("mack", 19));
|
||
|
||
// 遍历容器中所有成员,成员函数作为仿函数时,则通过容器成员调用它的仿函数
|
||
for_each(vs.begin(), vs.end(), mem_fun_ref(&Stu::show));
|
||
|
||
return 0;
|
||
}
|