什么是仿函数
Function Object ,函数对象,是泛型编程强大威力和纯粹抽象概念的强力例证,任何一个东西,只要它的行为像函数,它就是个函数。因此,如果你定义了一个对象,它的行为像函数,它就可以当函数来使用。
例如
例1
class X {
public:
void operator()(int i) const;
};
void X::operator()(int i) const {
cout << i << endl;
}
...
X x;
x(1);
例2:
这是一个for_each的实现:
template<class Iterator, class Operation>
Operation foreach(Iterator act, Iterator end, Operation op) {
while (act != end) {
op(*act);
++act;
}
return op;
}
int main(){
list<int> coll1;
for (int i = 0; i <= 9; i++) {
coll1.push_back(i);
}
foreach(coll1.begin(), coll1.end(), [](int it) {
cout << it << " ";
});
}
其中: Operation就是一个仿函数。
缺点
- 复杂
- 怪异
- 难懂
优点
- 仿函数是智能型函数
- 仿函数有自己的型别
- 仿函数比普通函数速度更快(template 特性所致)
网友评论