C++函数对象

函数对象

定义:函数对象本质还是个对象,它实现了operator()运算符的重载,在调用者使用起来和函数一样,别名又叫仿函数。

优点

1、通过函数对象调用operator()在编译阶段可以转成内联函数,直接展开,减少函数堆栈调用开销,而函数指针不可以,因为编译阶段只能看到指针的地址;
2、可以在对象内添加自己需要的定制信息,比如调用次数;

#include
#include
#include 
#include 
using namespace std;

//C语言函数指针
template<typename T>
bool comapre(T a, T b)
{
	return a>b;
}

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

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

template<typename T , typename Compare>
bool comapre(T a, T b , Compare comp)
{
	return comp(a , b);
}
//
//函数对象MyGreater
template<typename T>
class  MyGreater
{
public:
	bool operator()(T a , T b)
	{
		return a>b;
	}
};
//函数对象Myless
template<typename T>
class  Myless
{
public:
	bool operator()(T a , T b)
	{
		return a<b;
	}
};
int main()
{
	//C语言函数指针
	cout<<comapre(10,20 , mygreater<int>)<<endl;;
	cout<<comapre(10,20 , myless<int>)<<endl;
	cout<<"------------------"<<endl;

	//函数对象
	cout<<MyGreater<int>()(10,20)<<endl;
	cout<<Myless<int>()(10,20)<<endl;
	cout<<"------------------"<<endl;
	cout<<comapre(10,20 , MyGreater<int>())<<endl;;
	cout<<comapre(10,20 , Myless<int>())<<endl;

	return 0;
}


你可能感兴趣的:(【道阻且长C++】,算法,数据结构,c++)