随笔分类 -  泛型编程

摘要:所以总结一下c++,java,c#的泛型。c++的泛型在编译时完全展开,类型精度高,共享代码差。java的泛型使用类型擦出,仅在编译时做类型检查,在运行时擦出,共享代码好,但是类型精度不行。c#的泛型使用混合实现方式,在运行时展开,类型精度高,代码共享不错。 很长一段时间我只知道java的泛型使用了 阅读全文
posted @ 2019-12-03 11:56 zzfx 阅读(635) 评论(0) 推荐(0) 编辑
摘要:#include<iostream> using namespace std; template<typename T> T * My_find(T *array,T n,T x){ T* p = array; int i; for(i=0;i<n;i++){ if(*p == x){ return 阅读全文
posted @ 2019-11-22 19:25 zzfx 阅读(207) 评论(0) 推荐(0) 编辑
摘要:泛型编程 = 代码模版 + 类型规则。 一、模版与代码生成 泛型的缺点: 可执行文件会变大。在存储空间有限时,必须要重视。《Effecitve C++》中专门提到:不要在模板中使用不必要的参数,因为每一个不同的参数编辑器都会为之生成一套相应的代码。泛型产生冗余代码是无法避免的。 模板元编程的优点: 阅读全文
posted @ 2019-11-13 11:10 zzfx 阅读(512) 评论(0) 推荐(0) 编辑
摘要:模版--》实现 泛型不会降低编译后的代码量。 所有实现都是编译器根据模版生成代码; 创建模版-〉复制(创建)类型-》使用类型。 一、泛型与语言 1、泛型只是语言(复用)层面的概念; 2、机器码和汇编没有泛型的概念; 3、语言处理过程(编译和解释)中,泛型会解释为具体的类型(数据类型和函数类型)。一个 阅读全文
posted @ 2019-11-11 17:42 zzfx 阅读(120) 评论(0) 推荐(0) 编辑
摘要:泛型的特征-为什么使用泛型 一、泛型的特征 泛型的特征是抽象 将具有相似结构和功能的集合抽象为一个泛型实现。 一个泛型的抽象实现对应一个集合的具体实现。 泛型的具体化的含义是实现为集合中的某一具体实现。 二、泛型的作用: 1、统一的形式; 2、代码的简化与复用。 三、泛型的形状 —使用—> 可替代的 阅读全文
posted @ 2019-09-06 11:13 zzfx 阅读(657) 评论(0) 推荐(0) 编辑
摘要:Class<T> transform T:作为类型,用于定义变量; transform:作为具体类的类;用于创建实例。 类型信息是脱敏的具体类; 可以使用class的具体功能; 不能使用具体类的功能; 阅读全文
posted @ 2019-08-30 17:50 zzfx 阅读(641) 评论(0) 推荐(0) 编辑
摘要:限定泛型能构造出什么样的类型; 限定构造器的参量是哪些类型; 和构造出的类型能够使用哪些功能。 类型约束(type constraint)进一步控制了可指定的类型实参,当我们创建自己的泛型类型或者泛型方法的时候,类型约束是很有用的。 bounded parameter 类型约束:通过特定的语法描述参 阅读全文
posted @ 2019-08-29 16:49 zzfx 阅读(359) 评论(0) 推荐(0) 编辑
摘要:函数类型与型变 型变描述了符合里氏替换原则的相关类型,在经过型变后是否符合和怎样符合里氏替换原则的特征。 经过类型构造后生成新的类型。 型变本身是类型构造器。 型变描述了构造器的特征; 继承中的协变逆变: c++、java、scala都支持返回值协变,也就是说在继承层次中子类覆盖超类的方法时,可以指 阅读全文
posted @ 2019-08-29 15:41 zzfx 阅读(240) 评论(0) 推荐(0) 编辑
摘要:另一个可以帮助理解型变的例子是 Scala 标准库中的 trait Function1[-T, +R]。 Function1 表示具有一个参数的函数,其中第一个类型参数 T 表示参数类型,第二个类型参数 R 表示返回类型。 Function1 在其参数类型上是逆变的,并且在其返回类型上是协变的。 对 阅读全文
posted @ 2019-08-29 14:40 zzfx 阅读(412) 评论(0) 推荐(0) 编辑
摘要:型变是复杂类型的子类型关系与其组件类型的子类型关系的相关性。 Scala支持 泛型类 的类型参数的型变注释,允许它们是协变的,逆变的,或在没有使用注释的情况下是不变的。 在类型系统中使用型变允许我们在复杂类型之间建立直观的连接,而缺乏型变则会限制类抽象的重用性。 class Foo[+A] // A 阅读全文
posted @ 2019-08-29 14:28 zzfx 阅读(144) 评论(0) 推荐(0) 编辑
摘要:泛型:类型构造器; 类型构造过程:具体类型; 类型约束:类型约束与类型推断 区分是类型构造器本身还是在构造具体类型 阅读全文
posted @ 2019-08-29 11:37 zzfx 阅读(185) 评论(0) 推荐(0) 编辑
摘要:无约束类型泛型不具有软件扩展性。 只有具有类型约束的泛型才具有软件扩展性。 具有约束的类型,在泛型结构的体系中才有活力。这个活力原因它的部分确定性,以及泛型机制与这部分确定性发生联系。 无约束类型,在泛型机制中只能用指针、引用等与类型无关的特性与泛型机制发生联系;从而限制了它的扩展性和灵活性。 无约 阅读全文
posted @ 2019-08-08 22:35 zzfx 阅读(206) 评论(0) 推荐(0) 编辑
摘要:泛型:基于类型组合的算法和结构构建; 泛型: 数据结构:类型的组合为数据结构; 算法: 基于泛型数据结构的算法构建; 阅读全文
posted @ 2019-06-06 23:16 zzfx 阅读(205) 评论(0) 推荐(0) 编辑
摘要:一、泛型的概念要素: 模版类型 + 参量类型 + 类型约束 + 扩展; 泛型编程是上述四个概念反复组合而形成的一种编程范式; 泛型编程 = 模版类型 + 参量类型; 模版类型:与引用类型无关的通用算法和结构; 二、范型编程的目的:模版复用的复合类型 产生功能模版复用的新类型; 通过类型的组合产生新的 阅读全文
posted @ 2019-06-06 14:15 zzfx 阅读(205) 评论(0) 推荐(0) 编辑
摘要:最近看swift的范型和typeclass很辛苦,一点也摸不着头绪; 所以总结了以下类型系统的运算法则,以简化类型的转化、组合、变换等规则; is-a has-a use-a like-a as-a extension-a assign-a like-a-default 一、类型分类: 1、norm 阅读全文
posted @ 2019-06-05 18:46 zzfx 阅读(169) 评论(0) 推荐(0) 编辑
摘要:泛型编程思想:复合类型的抽象和代码复用 阅读全文
posted @ 2019-03-26 10:50 zzfx 阅读(220) 评论(0) 推荐(0) 编辑
摘要:泛型是什么?包含参量化类型的类型 阅读全文
posted @ 2019-03-25 19:41 zzfx 阅读(202) 评论(0) 推荐(0) 编辑
摘要:类型运算: 类型指定、类型约束、类型依赖; 所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型。 https://www.cnblogs.com/arxive/p/6179972.html 因而函数重载是一种多态,而这样的多态被称作ad-hoc多态。 泛型程序设计(generic pro 阅读全文
posted @ 2019-03-25 19:39 zzfx 阅读(201) 评论(0) 推荐(0) 编辑
摘要:泛型:泛型结构(类、结构体)、泛型函数(从本质上来说也是一个结构)统称为泛型; 泛型参量:泛型中的待定参量; 类型指定(具体化):对泛型结构中的泛型参量进行指定,构造出具体的类型; 递归定义:泛型结构中的泛型参量依赖于外部的环境泛型参量; 约束:对一个泛型结构的泛型参量的可指定类型范围进行限制;或对 阅读全文
posted @ 2019-03-15 18:03 zzfx 阅读(189) 评论(0) 推荐(0) 编辑
摘要:一、类型构造使用:参量类型具体化指定(构造式引用); 使用已经构建完成的泛型结构 先指定泛型参量的类型,然后将泛型结构作为确定的类型使用: struct Stack<Element> {} var stackOfStrings:Stack<String> = Stack<String>() func 阅读全文
posted @ 2019-03-15 17:40 zzfx 阅读(360) 评论(0) 推荐(0) 编辑