c++泛型编程与模板元编程
@ lsq | 星期一,二月 17 日,2020 年 | 3 分钟阅读 | 更新于 星期一,二月 17 日,2020 年

写在前面

今天来写点有点难度的东东:泛型编程与模板元编程。 写这种生僻的东东我是比较排斥的,但谁让我看到boost库中专门对这两个东东分了个大类别呢。开始吧~

概念

从概念上讲:

  1. 编程 就是你的程序来处理一段数据
  2. 元编程 就是你的程序用来处理其它程序
  3. 泛型编程 就是你的程序实现了某种功能   这个功能可以处理不同类型的的数据

泛型编程类似于数学中的解析延拓,元编程是用代码生成代码。

不知道大家有没有过这种体验,学数学时整本书上的概念都背熟了,一碰到题目还是手足无措,不知从何下手。泛型和模板元编程这两个概念理解起来还是比较简单的: 泛型编程,即把参数的数据类型作为一个参数传递到函数,本质上就是参数化类型。简单举个例子,如果一个函数需要接收int或float类型的变量,需要使用重载函数编写2个类似的函数代码;这时候如果使用泛型编程,只需要把接收变量的类型泛型化,写一个函数即可实现接收各种数据类型的函数了。

模板元编程,即使用模板实现元编程,是元编程最基本的运用。而所谓元编程,就是编写一个用来编写程序的程序代码。举个例子,使用递归函数的时候,就可以采用模板元编程的方式去替代实现,按元编程的思想和格式写一段代码,计算机就会在编译期自动生成递归调用时需要的所有函数的代码,从而实现计算得到结果。 优缺点

泛型编程是非常棒的技术,可以说是一个只有优点没有缺点的技术了,推荐大家尽快使用起来。 泛型的优点:

  • 提升性能。开发历史上抽象能力的上升往往意味着性能的下降,但是泛型并不是!因为使用泛型,可以避免装箱和拆箱操作。
  • 类型安全。ArrayList等类中都有强制转换的机制,如果使用泛型编程,则编译器可以直接检查出错误。
  • 代码重用。泛型定义一次,就可以用许多不同的类型实例化。

泛型的缺点:

  • 可执行文件会变大。在存储空间有限时,必须要重视。《Effecitve C++》中专门提到:不要在模板中使用不必要的参数,因为每一个不同的参数编辑器都会为之生成一套相应的代码。泛型产生冗余代码是无法避免的。

模板元编程的优点:

  • 运行效率提升。因为模板的运算以及展开都是在编译期,会花相对较长的编译时间,但能够获得更有效率的运行码。
  • 代码量变小。模板元编程允许程序员专注在架构上并委托编译器产生任何客户要求的实现。因此,模板元编程可达成真正的泛用代码,促使代码缩小并较号维护。

模板元编程的缺点:

  • 可读性差。较难令人理解,对于模板元编程经验不丰富的程序员来说,程序变的难以维护。
  • 移植性。由于各编辑器的差异,大量依赖模板元编程的代码可能会有移植性问题。

可参考ruby元编程ruby元编程示例

© 2011 - 2023 lsq 的博客

Powered by Hugo with theme Dream.

avatar
关于我

lsq 的 ❤️ 博客

记录一些 🌈 生活上,财务相关技术上的事

毕业于 🏫 东北财经大学

空闲时间会做分享财务工作上相关技术

主要分享是:

  • VBA & Power Query
  • Excel 图表制作
  • LaTeX

写着玩:

  • Ruby
  • Bash shell
  • Python

目前在深圳工作

– 2021 年 04 月 11 日更新