仿函数

作者: 圣明 | 来源:发表于2022-06-10 18:05 被阅读0次

    什么是仿函数

    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 特性所致)

    相关文章

      网友评论

          本文标题:仿函数

          本文链接:https://www.haomeiwen.com/subject/xfpbmrtx.html