由于boost::lambda用了boost::tuple。
那么对tuple关键的代码进行分析。
tuple的使用很方面,也很简单,比如:
tuple的源码如下:
其中tuple继承map_tuple_to_cons是这个类很关键的角色,它之所以能够存放类型和类型对应
的变量(这个类是由cons类完成的)就是因为这个原因。
而map_tuple_to_cons的实现方式也值得研究:
扫描二维码关注公众号,回复:
4815984 查看本文章
这个类,如果用cons来描述,展开的形式如下:
这样的形式才能形成模板递归。在《Modern C++ Design》这本书前面的章节,有许多关于这方面的讨论。
形式上基本一样,不过tuple数据结构含有类型对应的变量。这点与书上不同的地方。
访问元素的方式同书上一样。
上面的inherited的类型是cons是一个嵌套的递归模板方式,因此构造函数的调用是调用:
上面的代码特别注意构造函数的调用方式,会递归的调用的构造函数。
其它同书上代码一样。而head实际上就是存放的变量,tail是末尾类型的变量,即可能是嵌套
模板对象也可能是单个元素(类型)对象(最后)。通过递归的方式,把所有的类型及变量变得可以访问。