(第一章)
1.7 为什么需要一个元程序库?
与从头开始创建一个元程序库相比,我们更愿意使用更高阶的 Boost Metaprogramming Library(MPL)。就算你并没有通过本书来了解 MPL,我们认为你花一些时间来学习它,是一个不错的投资。因为在每天的工作中,MPL 会带给你非常多的便利。
其一是高质量。大多数的程序员在使用模板元程序组件时,都他们看成是应用到某些更大的项目中的实现细节而已。与此相反的是,MPL 的作者将开发有用、高质量的工具及惯用法的工作看成是他们的中心任务。通常来说,在 MPL 中的组件一般都更加灵活,并且比因为在实现工程目标时而产生的实现要好得多,并且如果未来发而新的更新版本时,你也可以期待更多的优化及功能的增强。
其二是重用。所有封装库都是可重要的组件。更重要的是,一个设计良好的泛型库建立了一个概念及惯用法的框架,为可能出现的问题一个可以重用的思想模型。就是 C++ 的标准模板库给了提供了迭代器以及函数对象等这些协议一样,Boost MPL 也给我们提供了类型迭代器以及元函数协议。一个考虑全面的惯用法的框架关注于元程序作者的设计决策而这样可以使得他将注意力放在手头的工作上。
其三是可移植性。一个好的库能够在相当丑陋的平台实现上能够顺利地过渡。而在理论上,C++ 元程序不应该关注这样的问题。在实践中,即使是 C++ 在标准化后了六年之久,对于模板的支持依然不是很一致。这当然也没有什么可惊讶的:C++ 模板是语言中最后才完成的特性,并且也是最复杂的特性。其中也因为 C++ 中元程序的威力太强大。
其四是有趣。每天重复一些样板式的代码是一件非常乏味的工作。快速将高阶的组件组装成可读、优雅的设计是一件有趣的事情,使用 MPL 不再因为处理重复的元程序模式而无聊透顶。特别是处理结束特化的处理及显式递归这样的重复性工作可以有效避免。
其五是生产率。除开个人的满意因素,我们的项目的健康依赖于有趣的编程工作。当我们已无乐趣可言的时候,我们就会厌倦、迟缓。而臃肿而错误百出的代码甚至比写慢代码更加昂贵。
正如你所见,Boost MPL 的起因正是基于实践的考量,这也是其他的库所以开发出来的内在基础。我们认为,它的出现是模板元程序最终从它的异域王国里开始走进 C++ 程序员的日复一日的工作普通需求家园的标志。
最后,我们愿意再次强调上面所列的第四个项: MPL 不仅使得元程序的写作变得实际而且容易,而且在工作中使用它也是一种愉悦。我们希望你也能享受学习和使用 MPL,正如我们在使用和开发它时所体验的那种快乐。