C++学习笔记26:泛型编程概念

一、什么是泛型编程?

  • 泛型就是通用的型式
  • 编写不依赖数据对象型式的代码就是泛型编程

二、为什么需要泛型编程?

  • 函数重载,相似类定义与型式兼容性

例如:设计函数,求两个数据对象的较小值

//未明确规定参数型式,因c/c++的强制式检查特性

//必须为不同型式的参数分别实现

//函数重载的数目巨大

//以上都是难以解决的问题

1.函数重载问题的解决方案有:

  • 使用C的含参宏

缺点:

  • 无型式检查,无法再编译期检查程序错误
  • 宏文本替换时,要注意操作符优先级,错误的宏文本有可能导致问题

结论:

  • 需要一种机制,能够在语法层面解决宏的问题

2.相似类定义问题

动态数组类

  • 定义存储整数的动态数组类
  • 定义存储浮点数的动态数组类
  • 定义存储某类对象的动态数组类
  • 定义存储某类对象指针的动态数组类
  • ....

结论:

  需要一种机制,能够在语法层面解决相似类的重复定义问题,降低编程工作量

3.型式兼容性问题

C型式转换:(T)x

  不安全

  内建型式(int ,double)对象转换安全性基本保证

  类对象转换可能导致无法控制的严重后果

C++型式转换:T(x)

  可能需要单参数构造函数和重载的型式转换操作符

  不安全

  如果未实现,转换就不存在

类库架构

  类的继承和多态频繁要求能够通过基类的指针或引用访问派生类的对象

  需要沿着类的继承层次,频繁进行对象的型式转换

存在的问题:

  C/C++已有的型式转换均为静态转换,不能适应指针或引用的多态性

  型式转换必须适应全部型式,并能自如操作;然而很不幸,型式无穷尽,开发人员无法编写完备的型式转换代码

保证型式兼容性的机制

  确保型式转换操作合法有效,并在失败时通知用户

  需要维持对象的运行期型式信息(run-time type information,RTTI)

  转换结果确认:通过转换操作的返回值确认结果,或者在失败时触发特定信号;后者需要使用异常处理机制;

  实现策略:模板与型式参数化

三、怎样进行泛型编程?

  • 泛型编程技术手段:模板与型式参数化
怕什么真理无穷,进一寸有一寸的欢喜。---胡适
原文地址:https://www.cnblogs.com/hujianglang/p/6246439.html