• 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());//这里也可以使用临时对象

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

  • 相关阅读:
    FPGA时序约束的几种方法
    使用NiosII代替SignalTap来监测FPGA内部数据
    Modelsim的使用
    Modelsim+Debussy
    ChipScope用法总结
    QuartusII增量编译的个人学习
    quartus II .qsf文件(zz)
    RAM与Nand/Nor flash之间的区别 (转)
    黑金资料AX301_A的Quartus工程建立、编译及引脚分配、程序下载
    关于sg90舵机的,要知道!要注意!
  • 原文地址:https://www.cnblogs.com/songliquan/p/3343998.html
Copyright © 2020-2023  润新知