C++中使用mem_fun()使得类成员函数成为仿函数

mem_fun()是STL六大组件中配接器的一种,它接收成员函数指针,使得我们可以将类成员函数当做仿函数来使用。

仿函数一般是在我们使用STL中的算法,进行自定义类型操作时,进行定义的。例如sort()算法,可自定义比较函数,for_each()算法,可自定义遍历操作等等。

使用mem_fun()可以避免我们自定义仿函数(重载()操作符),而直接使用类中的成员函数,来对类对象进行相应的操作。

以下是代码实现:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;

// 类定义
class display
{
public:
	// 成员变量
	int val;
	// 构造函数
	display(int v) :val(v) {}
	// 成员函数:进行变量的自增,打印操作
	void showValue()
	{
		++this->val;
		cout << "using mem_fun. val = " << this->val << endl;
		return;
	}
};

int main()
{
	// 定义数组,存储类对象指针
	vector<display*> v;

	display* d1 = new display(1);
	display* d2 = new display(2);
	display* d3 = new display(3);

	v.push_back(d1);
	v.push_back(d2);
	v.push_back(d3);

	// 使用for_each()算法,绑定类成员函数,对每一个对象的成员变量进行打印操作
	for_each(v.begin(), v.end(), mem_fun(&display::showValue));

	delete d1;
	delete d2;
	delete d3;

	return 0;
}

以上绑定的成员函数只是对对象的成员变量进行自增和打印操作,在实际使用中,可以在函数内部实现其他功能操作。

谢谢阅读。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章