c++ - 函数对象优于函数指针
来源:互联网 发布:java毕业项目源代码 编辑:程序博客网 时间:2024/05/18 14:43
函数往往需要一些数据才能工作,但一个函数指针没有相关联的数据。使用全局变量?有没有更好的办法?
函数对象就是重载了operator()的类的对象。它的优势在于,在函数调用之间保持状态或者将状态信息传递给函数的时候,每个对象有自己的信息,不必求助于全局或局部静态变量以及一些“卑鄙的”花招。即,函数对象既保持了函数指针的灵活性,又封装了数据,保证了他们的安全性。
此外,通过创建一个带有虚拟operator()的函数对象的层次结构,可以获得虚函数指针的效果--动态行为。
函数对象还可以封装非成员函数的Func类型以及成员函数。以封装成员函数为例:
class Func{
public:
virtual ~Func();
virtual double operator()(double)=0;
};
double integrate (Func &f, double low, double hight);
template <class C>
class MFunc : public Func{
public:
MFunc( C & obj, double (C::*f) (double) )
: obj_(obj), f_(f) {}
double operator () (double d)
{ return (obj_.*f) (d); }
private:
C & obj_;
double (C::*f_)(double);
}
//...
AClass anObj;
MFunc<AClass> f( anObj, & AClass::aFunc);
double area = integrate (f, 0.0, 2.718);
=======================
说说另外一个类似的话题 --
STL函数对象
使用函数对象作为比较器还有一个额外的好处,就是比较操作将被内联处理,而使用函数指针则不允许内联。
用作STL比较器的函数对象一般都很小巧、简单而且快速。一般没有数据成员、没有虚函数、没有显式声明的构造函数和析构函数,且对调用的重载是内联的。
当与STL协同使用时,在函数对象中避免(或尽量少)使用数据成员的另一个原因在于,STL实现可能会为一个函数对象产生若干份复制,而且假定所有这些复制都是一致的。为了确保一个对象的所有复制一致,最简单的方式就是不要让对象带有任何数据成员。
- c++ - 函数对象优于函数指针
- C++的函数对象优于函数指针地方
- 函数对象、函数指针
- 函数指针 & 函数对象
- C++:指向对象成员函数的指针
- 函数指针与C的面向对象
- C++----函数&函数指针
- C指针函数 && 函数指针
- 函数对象,函数指针,指针函数
- C++,C函数指针
- C/C++:函数指针
- 函数指针和函数对象
- 函数对象与函数指针
- 函数指针和函数对象
- 函数指针和函数对象
- 函数指针vs函数对象
- 函数对象与函数指针
- 函数指针和函数对象
- poj 1988 Cube Stacking 并查集
- 为什么单例对象的并发调用需要同步?
- Oracle ASM 详解 收藏
- 自己的路,自己选择
- Enlightenment 是窗口管理器,Enlightenment 是桌面外壳,Enlightenment是创建漂亮应用程序的材料
- c++ - 函数对象优于函数指针
- 25.VC(custom)-virtual list(大数据处理list)
- Text模式和PDU模式的区别
- 移动办公解决方案
- SRM 505 ----score 250
- 移动ERP
- struts2
- 基于matlab的图像小波降噪程序
- 美丽的EFL构建起来的桌面!