理解 boost预编译的FOR循环(1)SEQ 手动循环

为了能理解 boost预编译的FOR循环,http://huqingyu.com/blog/2018/10/1352.htm
先来看看下面的代码:

boost里,像(1)(2)(3)这样的参数叫做SEQ
FM_TAIL(seq),就是除掉SEQ的第一个括号后,剩下的内容,上面就是(2)(3)
FM_HEAD(seq),就是取SEQ的第一个括号里的内容,上面就是1
最后,展开后就是f(1) f(2) f(3)

FM_TAIL比较简单,就是“吃掉”一个括号,FM_EAT(x)后什么都没有,就吃掉了剩下的就是tail了

FM_HEAD稍微复杂一点点,等价于
FM_SEQ_ELEM_II( FM_SEQ_ELEM_0 (1)(2)(3) )
中间之所以用FM_SEQ_ELEM_I和FM_EXPAND,目的是要先展开里面的FM_SEQ_ELEM_0 (1)(2)(3),展开后是1, FM_NIL (2)(3)
所以FM_HEAD就是 FM_SEQ_ELEM_II  (1, FM_NIL (2)(3))
展开就只剩1了,就取了第一个括号里面的内容

VS2015编译测试通过。(能看到宏展开的样子,不能运行)
如何VS里,看宏展开?
项目->属性->c/c++ ->预处理器 -> 右边 预处理到文件,选择“是(/P)”
这样编译以后就会有.i文件,可以看这个文件知道宏展开后的结果

发表评论