详解C++语言中的函数对象
在C++语言的世界中有这样两个概念,向上类型转换,向下类型转换,分别描述的是子类向基类和基类向子类的强制类型转换,希望对C++语言的描述能给大家带来一些有用的信息。
一般而言,它是由一个重载了operator()的类所实例化得来的对象。 Function object的涵义比通常意义上的函数更广泛,因为它可以在多次调用之间保持某种“状态”――这和静态局部变量有异曲同工之妙;
不过这种“状态”还可以被初始化,还可以从外面来检测,这可要比静态局部变量强了。虽然传递函数指针被广泛应用于事件驱动系统中,以此实现回调函数通过指针来调用。
但 C++语言还是提供了另外一种可供选择的办法,即函数对象,利用它可以避免使用函数指针。这样做有几个优点。首先, 因为对象可以在内部修改而不用改动外部接口,因此设计更灵活,更富有弹性。
函数对象也具备有存储先前调用结果的数据成员。此外,编译器可以内联函数对象,从而进一步增强性能。函数对象可以具体表达依赖成员模板的通用算法 , 这些算法借助普通的函数指针难以完成。写个小示例:
- #include "stdafx.h"
- #include <iostream>
- #include <functional>
- using namespace std;
- class Action;
- class Drink;
- class Eat;
- class TestAction;
- class Action
- {
- public:
- int operator()(int i)
- {
- Act(i);
- return i;
- }
- virtual void Act(int i) = 0;
- };
- class Drink : public Action
- {
- void Act(int i)
- {
- cout<<"No. "<<i<<" drink..."<<endl;
- }
- };
- class Eat : public Action
- {
- void Act(int i)
- {
- cout<<"No. "<<i<<" eat..."<<endl;
- }
- };
- class TestAction
- {
- public:
- void TestAct(int i, Action& testAct)
- {
- testAct(i);
- }
- };
- 上一篇:浅析Visual C++ 6.0的组成部分
- 下一篇:如何使用C++函数对象?