原则48:认识template元编程

正如题目所述该原则就是让你对模版元编程有一个初步的了解。模版元编程简称为TMP是template metaprogramming的缩写,它可以将原本在运行期才做的事情放到编译期来做。它不是被发明的而是被发现的,现在正处于起步阶段。
TMP有两大作用:1、它让变成更容易。2、它只在C++编译期执行,于是它可以把工作从运行期转移到编译期。
这会导至TMP的优缺点。
TMP的优点:原本在运行期出现的错误可以在编译期找出来。它使得C++程序在各方面更高效,比如较小的可执行文件,较短的运行期,较少的内存占用等。
在这里作者提到了上一个原则中的advance的例子。作者说编译器必须确保所有的代码都是有效的无论这个代码能否被最终执行到,因此有些代码虽然从逻辑上来讲没有问题,但是编译器对其有效性进行了检查,从而导致编译器报错。而使用TMP生成的若干个重载函数会根据特定的情况调用相应的函数,解除了编译器对代码的无用的有效性检测从而达到了预期的目的。
TMP的缺点:它使编译期变长了。
TMP的语法不同于正常的C++,它是个函数式语言。在此原则中,作者提到TMP没有循环,它只能通过递归来实现循环,并且每个TMP的具体化都是个struct。
作者还说TMP非常强大几乎无所不能。为了说明这一点作者举了它能够确保度量单位的正确性,优化矩阵运算和可生成客户定制之设计模式实现品等。
目前TMP还不是很成熟,它主要用于程序库的开发。
总结:
1、TMP可将工作从运行期转移至编译期从而获得错误的早期检测和更高的执行效率。
2、TMP可生成基于“政策选择组合”的客户定制代码,也可避免对某些特殊类型不合适的代码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,613评论 25 709
  • //Clojure入门教程: Clojure – Functional Programming for the J...
    葡萄喃喃呓语阅读 3,854评论 0 7
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • 湛湛青天,朗朗乾坤。天生万物,以人为尊。人生何途,任尔择行。取道不同,得失已定。天道不爽,最为公平。贪廉殊途,全念...
    牧字阅读 408评论 0 0