• C++ 仿函数


    版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/lr982330245/article/details/30723563
    在我们写代码时有时会发现有些功能的实现的代码,会不断的在不同的成员函数中用到。可是又不好将这些代码独立出来成为一个类的一个成员函数。可是又非常想复用这些代码。写一个公共的函数,能够,这是一个解决方法。只是函数用到的一些变量。就可能成为公共的全局变量,再说为了复用这么一片代码。就要单立出一个函数。也不是非常好维护。

    这时就能够用仿函数了,写一个简单类,除了那些维护一个类的成员函数外。就仅仅是实现一个operator(),在类实例化时。就将要用的。非參数的元素传入类中。这样就免去了对一些公共变量的全局化的维护了。又能够使那些代码独立出来。以便下次复用。

    仿函数(functor),是通过重载()运算符模拟函数形为的类。
    因此,这里须要明白两点:
    1 仿函数不是函数,它是个类;

    2 仿函数重载了()运算符。使得它能够像函数那样子调用(代码的形式好像是在调用函数)。


    实例:

    #include <iostream>
    using namespace std;
    
    class Compare
    {
    public:
    	bool operator()(int num1, int num2) const
    	{
    		if (num1 <= num2)
    			return true;
    		else
    			return false;
    	}
    };
    
    void sort(int *array, int size, const Compare &cmp)
    {
    	if (array == NULL)
    		return;
    	
    	for (int i=0; i<size-1; i++)
    	{
    		for (int j=0; j<=size-2-i; j++)
    		{
    			if (!(cmp(array[j], array[j+1])))
    			{
    				array[j] = array[j]^array[j+1];
    				array[j+1] = array[j+1]^array[j];
    				array[j] = array[j]^array[j+1];
    			}
    		}
    	}
    }
    
    void list(const int *array, int size)
    {
    	if (array == NULL)
    		return;
    	
    	for(int i=0; i< size; i++)
    		cout << array[i] << " ";
    	cout << endl;
    }
    
    int main()
    {
    	int array[] = {0, 9, 8, 7, 6, 5, 4, 3, 2, 1};
    	sort(array, sizeof(array)/sizeof(int), Compare());
    	list(array, sizeof(array)/sizeof(int));		
    	return 0;
    }

    sort()中cmp为Comparer类的一个对象,但这里的使用方法好像它是某个函数的样子。这就是仿函数的真谛



  • 相关阅读:
    Dubbo笔记(二)
    Dubbo笔记(一)
    初识多线程
    Redis底层结构全了解
    用golang刷算法--归并排序算法
    谈谈golang中的channel
    用golang刷算法--快速排序算法
    谈谈golang中的引用类型与地址分配
    Arch安装后的配置(超详细)
    ArchLinux安装(Deepin v20桌面环境)
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10502840.html
  • Copyright © 2020-2023  润新知