Note of Justin

关于工作和读书的笔记

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  47 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

留言簿(14)

搜索

  •  

积分与排名

  • 积分 - 51714
  • 排名 - 433

最新评论

阅读排行榜

评论排行榜



[原创文章欢迎转载,但请保留作者信息]
Justin 于 2010-05-14


本课大师要(大概地)讲讲模板元编程(Template Metaprogramming, TMP)。

TMP的生命很短,只活在程序编译期间,最终代码生成后,模板元编程的使命就完成了。

大师说TMP有两个重要的作用,由于它是在程序编译期间运行的,于是:
  1. 模板元编程使得一些很难或是不可能完成的任务变得很简单。
  2. 它可以把程序运行期的一些工作转移到程序的编译期。

第一个作用说了等于没说@#¥%,我还没领悟出来。
第二个左右倒是比较容易理解的,好处也很多:把运行期的工作转移到编译期,程序运行时的错误就可以在编译期跑出来得到纠正;最终代码也会变小,运行时间变短,需要的内存也会变少,等等。当然,代价就是编译时间会变长。

由于C++本身并没有提供可以直接进行模板元编程的机制,所以需要用一些旁门左道来实现TMP。下面来回顾一下上课的内容:

程序的元素之一就是判断分支,一般的语言里会有if-then-else之类的工具可以使用,在C++的模板元编程中,就没有那么直观了。我们需要用到模板+重载(是不是想到了traits?)。
例子直接看上一课的笔记就行了:要不要吃面前的食物呢?如果是芝士堡我就吃,如果是芥末我就不吃。这个判断的过程在编译期就已经完成了,到了程序运行的时候就省去了这一步。

程序中的另外一个要素就是循环,用for/while实现循环已经是条件反射了,不过在C++模板元编程的世界,没有现成的for/while可以用。我们可以用的是函数的嵌套来实现TMP中的循环。(例子我举不出比书上更好的,就去看书里的吧@#¥%)

当然,不要以为读了第48章就可以号称懂模板元编程了。大师这一课的题目是“要知道模板元编程这么一回事”(Be aware of template metaprogramming)。是否真正掌握到这门左道,还是要看后面个人的造化了……
posted on 2010-05-14 09:49 Justin.H 阅读(662) 评论(0)  编辑 收藏 引用 所属分类: Effective C++ 炒冷饭

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理