zoukankan      html  css  js  c++  java
  • STL学习笔记8 -- 函数对象

      重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的operator()来实现的。

      函数对象更重要的作用是实现函数回调,可以替代指针实现函数回调。

    定义如下:

    struct int_max
    {
        int operator()(int x,int y)
        {
            return x>y?x:y;
        }
    };

      调用时生成一个对象:

        int_max int_max1;
        cout<<int_max1(3,6)<<endl;

      其中int_max1(3,6)的调用不是函数形式,而是int_max1.operator()(3,6);

      通常函数对象中不定义构造函数和析构函数,因此在这创建和销毁过程中不会出现任何问题。

      而且还可以通过模板实现多样性。

      类声明如下:

    class T_max
    {
    public:
        template <class T>
        T operator()(T x,T y)
        {
            return x>y?x:y;
        }
    };

      函数定义如下:

    template <class T>
    void max_test(T a,T b,T_max &ma)
    {
        cout<<ma(a,b)<<endl;
    }

      使用如下:

        T_max max1;
        cout<<max1(3,6)<<endl;
        max_test(12,77,T_max());//这里也可以使用临时对象

      函数对象的使用,比指针安全多了,以后函数回调时可使用其替代函数指针。

  • 相关阅读:
    angularjs中ng-repeat-start与ng-repeat-end用法实例
    随笔 javascript-抽象工厂模式
    VMware一些使用心得
    oracle 12c的数据库导进 11g
    架构师基本功:消息队列
    如何提高工作效率
    oracle 12c 13姨
    架构师基本功:SOA
    autofac如何注册静态方法里的接口对象
    发布Java桌面程序
  • 原文地址:https://www.cnblogs.com/songliquan/p/3343998.html
Copyright © 2011-2022 走看看