C++函数对象

函数对象

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

优点

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

#include<iostream>
#include<vector>
#include <algorithm>
#include <functional>
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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值