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>); 
    }
  • 相关阅读:
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    线性表——数组实现
    this指针与const成员函数
    类对象拷贝是不是赋值操作??
    你真的理解内联函数吗?
    名字查找先于类型检查:函数重载与作用域
    谈谈函数调用
    推荐形参使用常量引用:void func(const T &);
  • 原文地址:https://www.cnblogs.com/webcabana/p/12024535.html
Copyright © 2011-2022 走看看