我正在尝试完成类似的事情:
#define FOO( N ) Bar ## N ## _ Bar ## N - 1
所以说FOO( 2 ) = Bar2_Bar1
问题出在N-1
那儿。预处理器不会做这样的数学运算,但是 boost 有方便的 BOOST_PP_DEC 宏来减少输入。
因此,如果我现在尝试以下操作:
#define __FOO( N, N_MINUS_ONE ) BAR ## N _ ## Bar ## N_MINUS_ONE
#define FOO( N ) __FOO( N, BOOST_PP_DEC( N ) )
我本来希望它可以工作,但它实际上直接粘贴了宏名称并且不评估它。
奇怪的是,如果我这样做:
#define TEST( N ) BOOST_PP_DEC( N )
它似乎工作。我到底在这里错过了什么?