首页 > 其他 > 详细

泛型编程与STL学习-function object

时间:2014-03-26 19:31:47      阅读:419      评论:0      收藏:0      [点我收藏+]

function object:以class形式包装的函数(在类中重载操作符()),除此以外,它还可以像一般class一样拥有 成员变量 和 成员函数,你可以以此利用function object 来表现 具有局部状态的函数,例如:

template <class Person>

struct last_name_is{

string value;

last_name_is(const string& val): value(val) {}

bool operator () (const Person& p) const

{

return p.last_name == value;

}

};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

函数对象(仿函数),作为【作用于线性区间上的算法】的附属品,使得算法 更泛型化,一般化。例如:使得线性查找一般化。

template <class InputIterator, class Predicate>

InputIterator find_if ( InputIterator first, InputIterator last, Predicate pred )

{

while( first != last && !pred(*first) )   //在此处pred(*first)调用even<int>类的重载操作符()函数

++first;

return first;

}

/**********************************函数对象************************************************/

template <class Number>

struct even{

bool operator () (Number x) 

{

return ( x & 1 ) == 0;

}

};

/******************************************************************************************/

find_if( first, last, even<int>() ); // 在此处,传递函数对象 even<int>()作为算法find_if的第三个参数//even<int>()调用了类even<int>的默认构造函数,来构造函数对象。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

函数对象的分类: 无参(generator),单参(unary function),双参(binary function)等。其中 单参并返回bool类型的function object 称为predicate, 同理,双参并返回bool类型的function object 称为binary predicate。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function object adapter :函数对象适配器

首先:明白 适配器 相当于一种 类型转化器,将 某一种类型接口 转换成 另一种类型接口。

所以,函数对象适配器  的作用相当于是:将 某一种函数对象  转换成  另一种函数对象。

可以把 函数对象适配器 想象成更高层的 函数,该函数 以 函数对象 为参数,并返回 函数对象。

函数对象适配器 主要有两种:1. 绑定器 bind1st、bind2nd       2.  取反器   not1、not2

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

STL中预定义了基本的函数对象:如基本数值运算:plus 、 minus 、 multiplies 、 divides等。

如基本比较运算:equal_to 、not_equal_to、greater、less等。


泛型编程与STL学习-function object,布布扣,bubuko.com

泛型编程与STL学习-function object

原文:http://blog.csdn.net/qiaojianqj/article/details/22188997

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!