1

我正在尝试完成类似的事情:

#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 )

它似乎工作。我到底在这里错过了什么?

4

1 回答 1

0
#define FOO( N ) BOOST_PP_CAT(Bar ## N ## _Bar, BOOST_PP_DEC(N))
于 2014-07-07T12:52:22.800 回答