C++_模板与泛型

C++

编程范式(Programming Paradigm、范式)
1.代码重用:
   is-a 关系  公有继承,派生类重用基类的代码
   has-a关系  私有继承和继承保护
   包含-层次化和组合--通过包含对象成员的类来重用代码
   模板
2.命令式和声明式
   面向过程 面向对象 面向函数	
3.结构化编程
    结构化程序设计(structured programming)是进行以模块功能和处理过程设计为主的详细设计的基本 -采用数学推导方法
	非结构化编程:机器语言和汇编语言的编程范式被认为是非结构化编程,没有封装函数的概念

模板template

  template typename type parameter  decltype auto  inline 
  1.类型  类型 参数化类型   argument   parameter
  2.参数 : 个数和类型   
        类型: 1.内置类型 int double point 
	         2.用户自定义类型
			 3.模板类型-的模板参数
	   个数: 无参数 默认参数 变参数  位置参数 
	   形参和实参   
  3.模板 函数模板   常规模板
  4.实例化  -- instantiation
        编译器使用模板为特定类型生成函数定义,得到的是模板实例。
	  1.隐式实例化:(implicit instantiation)   一般情况下我们说的函数模板,就是隐式实例化函数模板 
            template 具体数据类型A 函数名<具体数据类型B>(具体数据类型B);  
	  2.显式实例化 explicit instantiation: 直接命令编译器创建特定实例  用具体的类型来代替泛型  
	      语法: 用<>符号指示类型,声明所需要的种类并在声明前加关键字 template 
		  template<> void Swap<int>(int,int) ; template<> 具体数据类型A 函数名<具体数据类型B>(具体数据类型B);  
  5.特化- explicit specialization  specialization
     不使用原本的函数模板,重新定义一个新的函数 +函数模板必须存在作为前提 

 6.优先级: 常规函数 实例化函数模板/具体化函数模板  函数模板 	 
           成员函数都可以是一个函数模板,统称为成员函数模板  类模板的成员函数模板
		   
 7.实现和继承 implementation inheritance	   
  
  泛型编程是一种使用模板来编写代码的方法,可以让程序员编写与具体数据类型无关的代码
   面向过程的程序设计 :条件语句if/else也可以看作是一种多态,它根据标记的不同状态值来选择执行不同的分支代码
   泛型程序设计:多态通过模板来实现。这里的设计思想就是不需要抽离类型之间的共性,而是直接对类型进行参数化,把它设计成模板,以表示共性。
      类型之间的差异通过特化来实现。编译器会根据类型参数(相当于单一的标记)自动决定是从模板产生实例,还是调用特化的实例
泛型标识 Type 这些统称为类型参数,类似与变量,但赋予他们的是类型  	  

类型系统 类型系统(type system)

函数多态或函数重载--通过重载函数来为不同数据类型提供相同的服务
     并非总能知道在声明中 应该使用哪种类型  
采用类型作为参数的程序设计
类有属性(即数据)和操作两个方面。
模板也有自己的属性和算法策略 
    特别是模板参数类型的一些具体特征,即trait)和算法策略(policy,即模板内部的操作逻辑	
	trait注重于类型,policy更注重于行为。
  01.声明一个描述T的特征的trait<T>模板,然后对每种具体类型(如int,char,用户定义的类)特化trait<T>
	  trait模板本身只是一个声明,并不提供定义,因为它并不知道参数T具体是什么类型。
	  trait的定义由针对各个具体类型的特化来提供。trait依赖于原来模板的主参数T,因为它表示的是T的特征信息
	     把模板参数T的具体特征信息抽象成一个独立的模板,通过特化为具体的类型并为该类型关联统一的别名,就可以在模板中引用这个别名,以获得T的具体特征信息
  02.policy模板技术,为模板的不同policy创建独立的模板。这里我们把policy实现为具有一个成员函数模板的普通类
		 成员函数模板  也可以用类模板来实现
特化 specialization
     模板是泛型代码,代表各个类型之间的共性,而特化则表示各个类型之间的差异 
实例化 

抽象类型(abstract type)  类型安全 (type safety  类型参数  非类型参数

函数式编程与面向对象

函数式编程 
    --函数模板 
	--递归使用模板
高阶函数 	
   赋值(assignment)  转换,隐式窄转换(conversion, implicit narrowing)  声明(declaration)
   
类模板 尖括号  typename  和 class  
   在这里看作变量的类型名,并不是说Type一定是一个类 template<class Type>,,现在可以使用 template<typename Type>
   模板常用于容器类--使用与将相同的存储方案用于不同的类型
     Array   template<class T ,int n>
	模板的具体化
  模板类用于基类,用作组件类,用作其他模板的类型参数
 
 
  部分具体化	 
  隐式实例化  显式实例化  显式具体化

scala 类型系统

   类型系统是编程语言中用于定义和管理变量、函数和类的类型的规则集合。
      它确保在编译时或运行时检查类型的一致性,并提供了类型推断、类型检查和类型转换等功能
    Scala 的类型系统还支持泛型   模式匹配
	  泛型类,型变注释(Variance Annotation),类型继承结构的上限和下限 伴生机制
	特质 trait
	
 父类型和子类型的关系主要通过类继承和接口实现机制来声明 泛型类型本身和参数化类型的实际类型	
posted @ 2024-05-14 16:41  辰令  阅读(3)  评论(0编辑  收藏  举报