仿函数

什么是仿函数

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 特性所致)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容