42函数对象

函数对象

#include <iostream>
using namespace std;

/*
template<typename T>
bool mygreater(T a, T b)
{
    return a > b;
}

template<typename T>
bool myless(T a, T b)
{
    return a < b;
}
*/

/*
1.通过函数对象调用operator(),可以省略函数的调用开销,比通过函数指针调用函数(不能够内联调用)效率高
2.因为函数对象是用类生成的,所以可以添加相关的成员变量,用来记录函数对象使用时更多的信息
*/
// C++函数对象的版本实现
template<typename T>
class mygreater
{
public:
    // 二元函数对象
    bool operator() (T a, T b) { return a > b; }
};

template<typename T>
class myless
{
public:
    // 二元函数对象
    bool operator() (T a, T b) { return a < b; }
};

template<typename T, typename Compare>
bool compare(T a, T b, Compare comp)
{
    // 通过函数指针调用函数,是没有办法内联的,效率很低,因为有函数调用开销
    return comp(a, b);
}

int main()
{
    cout << compare(10, 20, mygreater<int>()) << endl;
    cout << compare(10, 20, myless<int>()) << endl;

	set<int, greater<int>> set1; //默认从大到小排列元素
    for(int v: set1)
	{
		cout << v << " ";
	}

    return 0;
}
posted @ 2024-03-04 21:42  SIo_2  阅读(21)  评论(0)    收藏  举报