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

以上綁定的成員函數只是對對象的成員變量進行自增和打印操作,在實際使用中,可以在函數內部實現其他功能操作。

謝謝閱讀。

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