我正在尝试完成类似的事情:
#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 )
似乎有效。我到底错过了什么?
答案 0 :(得分:0)
#define FOO( N ) BOOST_PP_CAT(Bar ## N ## _Bar, BOOST_PP_DEC(N))