您的位置:首页 > 其它

调用操作符和函数对象的疑惑

2015-06-20 12:57 309 查看
/*
调用运算符和函数对象
 部分内容摘自:C++ Primer
 起初觉得这种写法很怪异,用结构体+重载“调用运算发”(就是圆括号),来实现函数的功能
*/
#include<iostream>
using namespace std;
/*封装了将int值转换为绝对值的操作*/
struct absInt
{
	int operator()(int val)
	{
		return val<0 ? -val:val;
	}
};
/*取绝对值函数*/
int AbsInt(int val)
{
	return val<0 ? -val:val;
}
int main()
{
	int i = -42;
	int func_result = 0;

	absInt absObj;
	unsigned int ui = absObj(i);
	func_result = AbsInt(i);
	cout<<ui<<endl;;
	cout<<func_result<<endl;
	getchar();
	return 0;
}
/*
  从上面的例子来说,我不觉得,这种重载函数调用操作符的操作会比直接使用函数好。
  也许这种方法适合于某些特定场景,可是是什么场景呢?
*/

http://zhidao.baidu.com/link?url=qSDqZlnk9YVhLHHG8MhWhYbLArWca4o8wS8pCRdgUbsDkC_UHP4Zm7KtaA7WHnXwInLsbSQco9IufACViyENgYaLONPcPS1V0GTXUpg1-ci
从上面的文章中得知,在向集合中添加数据时,运用它可以实现集合容器增加和查找内部数据的比较排序。另外,在Cpp Primer中,还介绍了另一种方法,使用比较函数。

我们可以知道,构造一个容器的比较器,通常有两种方法,一种是使用函数对象,另一种就是普通函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: