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 ----------------
原文链接: https://www.cnblogs.com/davidgu/p/4829097.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/222169
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!