收藏 分享(赏)

C++中的模板元编程.doc

上传人:tkhy51908 文档编号:6337701 上传时间:2019-04-07 格式:DOC 页数:5 大小:42KB
下载 相关 举报
C++中的模板元编程.doc_第1页
第1页 / 共5页
C++中的模板元编程.doc_第2页
第2页 / 共5页
C++中的模板元编程.doc_第3页
第3页 / 共5页
C++中的模板元编程.doc_第4页
第4页 / 共5页
C++中的模板元编程.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、不知道为什么,我最近越来越觉得 C+太难了,也许是因为我也陷入到扣语言细节的泥沼了吧。不过换个角度来讲,C+之所以这么有吸引力,也多亏了它有这么多复杂的细节,正是因为这些细节不断被发掘,才更加引得 C+程序员激情四射、奋不顾身。比如说模板元编程,C+模板在设计之初根本没有想到模板元编程这回事,更没想到 C+模板系统是图灵完备的,结果 1994 年 Erwin Unruh 提数了可以使用模板在编译器进行某些计算后,无数的大牛人便前仆后继,将模板编程发挥到了极致。我想我也是属于那种没事找抽的人,要不然我为什么会抱着C+ Templates这本书看呢?奈何我能力有限,兼且经验不足,使用 C+的时候少

2、,使用模板的时候更少,所以对于书中的内容,要么就是看了不是很懂,要么就是看了也不知道它有什么用。但是也不是完全没有收获,对于以前两个百思不得其解的问题,也还算是灵光一闪、豁然贯通了。其中一个是 Trait,这是我以前在使用 STL 和 ATL 库的时候遇到过的,虽然想不透其中的奥妙,但是不影响我写程序。另外一个是模板元编程,只听说过,如雷灌耳,但是却从来没有见过,也想象不出它的原理, C+ Templates终于让我看到了它的庐山真面目。先来说说 Trait,这是一个在 C+ Template 编程中经常用到的一个设计机制,我在使用 STL库中的 basic_string 时见到过,其定义如下

3、:template , class Allocator=allocator class basic_string其中就有一个模板参数为 Traits,而它的默认值为 char_traits,这里的char_traits到这里,我就迷糊了,我在想,为什么 char_trait就不行?难道说加上 trait 这几个字,模板类就有了三头六臂不成?另外一个见到 Trait 的地方就是 ATL 3.0 中的窗口类,这是我很早以前翻译的一篇文章,其中也使用到了 Trait,在定义窗口样式的时候,其代码如下:class CMyWindow: public CWindowImpl ;当时我就想了,为什么不直接

4、把“WS_OVERLAPPEDWINDOW|WS_VISIBLE,0”当成模板参数传递给 CWindowImpl来掺和一把?直到现在,我终于知道,原来一直错的就是我。我不该把 char_traitsclass TypeTraitspublic:typedef int ReturnType;template class TypeTraitspublic:typedef int ReturnType;template (;这下该明白了吧,为了得到 Factorial:result 的值,就会实例化 Factorial,然后又会实例化 Factorial,依次类推,一直递归下去。那么什么时候结束呢?

5、所以还需要一个特化版本:templateclass Factorialpublic:enum result = 1 ;下面写几行代码测试一下,如下:int main()std:cout :result class IfThenElse;template class IfThenElsepublic:typedef Ta ResultT;template class IfThenElsepublic:typedef Tb ResultT;一个模板类加上两个局部特化版本就解决了问题,如果第一个模板参数是 true,则选择 Ta作为结果,否则就选择 Tb 作为结果。虽然 C+为我们提供了模板元编程的能力,虽然我现在知道了它的基本实现机制,但是我依然想不到究竟什么时候需要用到模板元编程,听说要开发高可用性的第三方库少了它不行,也听说 Boost 库中到处可以见到它的身影,但仅仅只是听说而已,我自己是想不到,也做不到。当然了,学习 C+也并不是非要把这些语言的细节都啃透,除非是确实非用它不可。对于我来说,那些高质量的库,我只要会用就可以了,而且只有当确实需要的时候再去用这些库。因此,我还是保持简单的事情简单化,继续写我的简单代码吧。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报