• 适配器


    仿函数

    仿函数(Functors)也叫函数对象(function objects),即一种具有函数特质的对象,这种东西在调用者可以像函数一样的被调用。

    仿函数的作用

    从STL所提供的各个算法往往有两个版本,版本一表现出最常用的某种运算,第二个版本表现出最泛化的演算流程,允许用户以template参数来指定所要采用的行为操作。

    将该操作设计为一个所谓的仿函数(语言层面是个class),再以该仿函数产生一个对象,并以此对象作为算法的一个参数。
    除了上述仿函数的思路,我们还可以将该操作设计为一个函数,再将函数指针当做一个算法的参数,但是函数指针毕竟不能满足STL对抽象性的要求,也不能满足软件积木的要求——函数指针无法和STL其他组件搭配,产生更灵活的变化。

    如何实现仿函数

    仿函数实际上就是一个行为类似函数的对象,所以我们需要在类别定义中自定义(改写、重载)function call运算子(operator())。有了这样的运算子后,我们就可以在仿函数对象的后面加上一对小括号,以此调用仿函数所定义的operator()。

    仿函数的分类

    • 按照功能划分:算术运算、关系运算、逻辑运算
    • 操作数个数划分:一元、二元
      例如算术类:
    template<class T>
    struct plus:public binary_function<T,T,T> {
        T operator()(const T&x,const T&y) const
        {
            return x+y;
        }
    }
    

    仿函数的可适配操作

    当被adaptable改造的时候,adaptor可能会问这些问题,所以仿函数想要融入STL这个大家庭必须要继承了其中一个class,便自动拥有了那些型别,也就拥有了配接能力。

    unary_function

    unary_function是用来呈现一元函数的参数型别和返回值型别。

    template<class Arg, class Result>
    struct unary_function {
        typedef Arg argument_type;
        typedef Result result_type;
    }
    

    binary_function

    binary_function用来呈现二元函数的第一参数型别,第二参数型别以及返回值型别。

    template <class Arg1,class Arg2,class Result>
    struct binary_function {
        typedef Arg1 first_argument_type;
        typedef Arg2 second_argument_type;
        typedef Result result_type;
    }
    
  • 相关阅读:
    单链表的基本操作--c++
    剑指Offer-- 替换空格
    华为机试题-字符串分隔
    Leetcode 98. Validate Binary Search Tree
    树的层次遍历的几种方法
    Camera Path插件的使用
    3d 人物残像
    gameUnity 0.15 beta 网络游戏框架
    gameUnity 0.15alpha 网络游戏框架
    gameUnity 网络游戏框架
  • 原文地址:https://www.cnblogs.com/ccpang/p/12284046.html
Copyright © 2020-2023  润新知