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;
|
|||
|
}
|