函数对象和函数适配器的个人理解。我是一个小菜鸡
2016-11-05 00:00
232 查看
函数对象:
重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。又称仿函数。
一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个
类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的
operator()来实现的。比如,对于调用
int s = sum(1, 1);
你可能把它看作一个函数调用:
int sum(int i, int j) { return i+j; }
但很可能它是一个函数对象:
class Sum {
public:
int operator()(int i, int j) { return i+j; } //利用类重新定义()操作符。
//运算符重载格式:
函数类型 operator 运算符名称(形参){重载处理}
};
Sum sum;
而大多数情况是
template <class T> //定义类模板
class Sum {
public:
T operator()(T i, T j) { return i+j; }
};
Sum <int> sum; //与template <class T>
“在标准库中,函数对象被广泛地使用以获得弹性”,标准库中的很多算法都可以
使用函数对象或者函数来作为自定的回调行为;
预定义的函数对象学习:
Greater<int>() (包含两个参数)比较大小,前一个参数为容器,后一个参数可以通过函数适配器bind2nd绑定为第二个参数;
Modular<int>()(包含两个参数)求模;使用同上;
函数适配器:
组合函数对象。函数适配器,用于扩展一元和二元函数对象,如functor 函数对像等等。用于容器与算法之前的操作时使用。(有调节原始函数对象的作用)多使用预定义好的函数适配器。
学到的函数适配器:
bind1st(); 绑定第一个参数
Bind2nd();绑定第二个参数
Not1();取反,1表示一元谓词
Not2(); 取反,2表示二元谓词
重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。又称仿函数。
一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个
类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的
operator()来实现的。比如,对于调用
int s = sum(1, 1);
你可能把它看作一个函数调用:
int sum(int i, int j) { return i+j; }
但很可能它是一个函数对象:
class Sum {
public:
int operator()(int i, int j) { return i+j; } //利用类重新定义()操作符。
//运算符重载格式:
函数类型 operator 运算符名称(形参){重载处理}
};
Sum sum;
而大多数情况是
template <class T> //定义类模板
class Sum {
public:
T operator()(T i, T j) { return i+j; }
};
Sum <int> sum; //与template <class T>
“在标准库中,函数对象被广泛地使用以获得弹性”,标准库中的很多算法都可以
使用函数对象或者函数来作为自定的回调行为;
预定义的函数对象学习:
Greater<int>() (包含两个参数)比较大小,前一个参数为容器,后一个参数可以通过函数适配器bind2nd绑定为第二个参数;
Modular<int>()(包含两个参数)求模;使用同上;
函数适配器:
组合函数对象。函数适配器,用于扩展一元和二元函数对象,如functor 函数对像等等。用于容器与算法之前的操作时使用。(有调节原始函数对象的作用)多使用预定义好的函数适配器。
学到的函数适配器:
bind1st(); 绑定第一个参数
Bind2nd();绑定第二个参数
Not1();取反,1表示一元谓词
Not2(); 取反,2表示二元谓词
相关文章推荐
- 马上理解js中的函数为何是一个对象
- 理解函数对象的函数适配器
- JavaScript对象、函数的理解,$.ajaxsetup({complete:XX})中complete属性是一个函数。
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?(个人理解)
- 马上理解js中的函数为何是一个对象
- 同一个类的不同对象,对象的成员函数可以互相访问各自对象的私有变量和私有成员函数
- php中引用&的真正理解-变量引用、函数引用、对象引用
- poj 3468..(存线段树个人模板(自敲)pushdown函数还不理解)
- C++调用空指针对象的成员函数成功的理解
- 函数对象适配器
- 对一个包含虚函数成员的对象bzero()会有什么问题?
- C++对象模型之编译器如何处理函数返回一个对象
- Chapter9——建立一个对象数组,内放5个学生的数据(学号,成绩),设立一个函数max,用指向对象的指针做函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。
- C++中用函数返回值初始类对象时的一个问题
- [iphone 开发学习笔记]Object-C和C语言最大的区别也是最大的扩展-----消息(即如何调用一个对象中的函数)
- 个人写的一个函数,高手勿喷
- 【M31】让函数根据一个以上的对象类型来决定如何虚化
- 【C++】让函数根据一个以上的对象来决定怎么虚拟
- 关于程序,进程,线程。程序个人理解:应用程序是一个车间,进程是一条生产线,线程是机器
- 声明一个哺乳动物类Mammal,再由此派生出狗类Dog,二者都定义Speak()成员函数,基类中定义为虚函数,声明类Dog的一个对象,调用函数Speak()