泛型编程与模板元编程介绍(概念、优点)

写在前面

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

概念

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

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

优缺点

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

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

泛型的缺点:

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

模板元编程的优点:

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

模板元编程的缺点:

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

你可能感兴趣的:(C/C++)