boost::preprocessor库简介

boost::preprocessor库,在boost这个大家族里担任着为C/C++预处理器编程提供支持的重任。它的思想来自C++ metaprogramming。

说起这个metaprogramming,我们其实见得不少了。C++ metaprogram之于C++程序的关系,就如同XML之于HTML、WSDL(WebServices的接口描述)之于gSOAP库(一个C++的 SOAP库)、SLICE语言(ICE接口定义语言)之于Ice库(互联网通讯库)、COM的接口定义文件之于C++的COM实现。它是对程序的编程,它 的目的是生成C/C++程序。基于这种思想,我们可以把类似 #define foo(x) 这样的宏语法想象为一种独立的语言,把 C++ Template programming 想象成另一种语言,而这两种语言都是独立于我们所熟知的C/C++语言的,这两中语言存在的目的,就是为了生成C/C++源代码!其中,宏语法由预编译器 负责转换,而模板语言则由C++编译器负责转换。而我们今天要说的boost::preprocessor库,则是针对宏语言而诞生的支持库。

显然,我们如果只为客户提供生成好的代码,这是不足的,一来生成的代码阅读困难(想想编译模板类时那些冗长而隐晦的错误提示吧);二来用户的新需求 无法满足,因为这需要由元语言重新生成代码。而如ICE和gSOAP这样的,提供元语言代码,并通过中间编译器编译成C/C++代码的方案要好许多,但增 加的编译过程无疑是一件琐碎繁杂的事,常用的代码构造系统,如make和scons,都需要经过改造才能整合进这些元编译过程。

C++的牛X之处,在于它把这些全部融合成了一个编译器,包括宏、模板、面向对象、面向过程,甚至到了融合汇编语言的地步。这样的编译器,无疑成了 一个旁然大物,怪不得gnu的logo是一个牛头呢,牛啊,庞然大物啊。C++就像一个技术疯子,不停地在自己身上捣鼓那些古怪而精妙的设想,就像那些在 Linux社区里不停编译测试最新软件的人一样,被称作小白,而又引以为荣。

那么,boost::preprocessor库对宏语言编程到底提供了那些支持呢?依我看,主要有两大类的支持。分别是:对运算的支持,以及对代码重复生成的支持。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值