zoukankan      html  css  js  c++  java
  • dart中的typedef <函数别名>

     typedef定义如下:

      typedef 给某一种特定的函数类型起了一个名字,可以认为是一个类型的别名。或者这样理解:

        自己定义了一种数据类型,不过这种数据类型是函数类型,按照这种类型实例化后的对象,就会具备类型检查;
    
    

      栗子举起,先来一个没有typedef定义:

    class SortedCollection {
      Function compare;
    
      SortedCollection(int f(Object a, Object b)) {
        compare = f;
      }
    }
    
    int sort(Object a, Object b) => 0;
    
    void main() {
      SortedCollection coll = new SortedCollection(sort);
      assert(coll.compare is Function)
    }

      可以看到coll.compare已经丢失了函数的具体信息;

      再来一个通过typedef保存别的栗子:

    typedef int Compare(Object a, Object b);
    
    class SortedCollection {
      Compare compare;
    
      SortedCollection(this.compare);
    }
    
    int sort(Object a, Object b) => 0;
    
    void main() {
      SortedCollection coll = new SortedCollection(sort);
      assert(coll.compare is Function);
      assert(coll.compare is Compare);
    }

      可以看到,我们通过typedef,定义了Compare类型,即使在int sort 传入后,compare仍旧保持Compare的类型;

      基本上typedef就是这样,最后说个高级一丢的玩法,泛型函数别名:

    typedef int Compare<T>(T a, T b); 
    
    int sort(int a, int b) => a - b;
    
    void main() {
      assert(sort is Compare<int>); 
    }
  • 相关阅读:
    使用NDK编译 libyuv <转>
    x264中重要结构体参数解释,参数设置,函数说明 <转>
    x264的一些参数设置对编码效率的影响
    首都儿研所开钙片!!!
    Android 媒体编解码器(转)
    opengl版本和扩展
    ffmpeg一揽子
    Android 使用SWIG生成Jni代码<转>
    CF 19D 线段树+set压缩坐标轴+离散化map
    android4.0 FaceDetection笔记
  • 原文地址:https://www.cnblogs.com/webcabana/p/12024535.html
Copyright © 2011-2022 走看看