C++ 11 - STL - 函数对象(Function Object) (上)

1. 定义

在STL中,可以把函数传递给算法,也可以把函数对象传递给算法。

那么,什么是函数对象呢?

我们来看下它的声明:

class X
{
public:
  // define function call operator
  return-value operator() (arguments) const;
  ...
}

你可以这样调用:
X fo;

...

fo(arg1, arg2);

 

我们来看个简单的打印的例子

PrintInt.h

#ifndef        Print_Int_H_
#define        Print_Int_H_

#include <iostream>
using namespace std;
class PrintInt 
{
public:
    void operator() (int elem) const 
    {
        cout << elem << ' ';
    }
};

#endif

 

FuncObjectTest.h

#ifndef        Stl_Alg_Func_Object_Test_H_
#define        Stl_Alg_Func_Object_Test_H_

#include "../../TestBase.h"

class FuncObjectTest : public TestBase
{
public:
    FuncObjectTest(const string &c, const string &d) : TestBase(c, d) { }
    void run();
private:
    void printFuncObject();
};

#endif

 

FuncObjectTest.cpp

#include <vector>
#include <algorithm>
#include <iostream>
#include "FuncObjectTest.h"
#include "../../Core/PrintInt.h"

using namespace std;

void FuncObjectTest::printFuncObject()
{
    vector<int> coll;

    // insert elements from 1 to 9
    for (int i = 1; i <= 9; ++i) {
        coll.push_back(i);
    }

    // print all elements
    for_each(coll.cbegin(), coll.cend(),  // range
        PrintInt());                 // operation
    cout << endl;
}

void FuncObjectTest::run()
{
    printStart("printFuncObject()");
    printFuncObject();
    printEnd("printFuncObject()");
}

 

运行结果:

---------------- printFuncObject(): Run Start ----------------
1 2 3 4 5 6 7 8 9
---------------- printFuncObject(): Run End ----------------

 

posted @ 2015-09-22 15:34  Master HaKu  阅读(3326)  评论(0编辑  收藏  举报