boost程序库完全开发指南 第5,
C元编程和Boost编程库(C元编程和Boost MPL)-hity CT 1专栏-博客频道-CSDN。网
C元编程和Boost编程库(C元编程和Boost MPL)中间部分
分类:
c
促进
发表文章
2009-05-16 03:03
406人阅读
评论(0)
收集
Boost报告中的MPL库分析MPL(元编程库)是David Abrahams和Aleksey Gurtovoy为了方便模板元编程而开发的库。2003年被Boost吸收,经过一些实质性的修改,现在已经相当完善了。其最新版本于2004年11月发布。MPL的出现是C模板元编程发展的一个创举。它提供了一个通用的高级编程框架,包括序列、迭代器、算法、元函数等组件。它具有高度的可重用性,不仅提高了模板元编程的效率,也扩大了模板元编程的应用范围。
(一)MPL的组织结构
图书馆的组织形式有时甚至比它的功能更重要。MPL的作者明智地借鉴了成功的STL,在MPL中保留了STL的许多概念,并巧妙地封装了函数式编程,让任何熟悉STL的程序员都能轻松理解MPL的用法。和STL一样,MPL有一个完整的概念体系,它的组成部分是经过仔细划分的。组件相对独立,接口通用,所以组件之间的依赖和耦合降到最低。
STL和MPL的组件概念比较如下:
STL概念
MPL对应概念
容器(集装箱)
序列(序列)
算法(算法)
算法(算法)
迭代器
迭代器
模仿函数(函子)
元函数类(元函数)
适配器(转接器)
有视图、插入迭代器、绑定元函数等同于仿函数适配器。
分配器
没有这个概念。
标准中未定义。
宏(宏)
(B) MPL对其他图书馆的依赖
MPL是一个高级库。它的地位和编译时执行的特殊性决定了它需要一些特殊的辅助设施,并且会依赖于其他库。
1.boost的预处理器库
预处理器库是一个基于宏的元编程库[7]。预处理器的作用发生在编译之前,所以比MPL高,能真正实现代码生成。其典型作用是迭代或枚举相似的代码段,以减少容易写错的重复代码段。MPL中的很多码都是近似的,比如在vector的原码中,需要定义n个码。
矢量{ … }
其中I从1到n迭代,为了减少重复工作,MPL的源代码大量使用自定义和预处理器库宏来迭代重复或递归的内容。然而,这也使得源代码难以阅读。例如,上面的扩展源代码首先在vector/aux_/numbered.cpp中定义: