如何多次追加到宏

How do I append to a macro multiple times?

本文关键字:追加 何多次      更新时间:2023-10-16

使用boost preprocessor库,我可以做这样的事情:

#define ARRAY (3, (a, b, c))
BOOST_PP_ARRAY_PUSH_BACK(ARRAY, d) // this expands to a, b, c, d

但是我如何多次这样做呢?假设我想在代码的不同部分多次执行push_back,然后显示结果?

下面的代码只打印出dummy:

#include <boost/preprocessor.hpp>
#include <vector>
#include <algorithm>
#define ARRAY (1, (dummy))
BOOST_PP_ARRAY_PUSH_BACK(ARRAY, 1)
BOOST_PP_ARRAY_PUSH_BACK(ARRAY, 1)
BOOST_PP_ARRAY_PUSH_BACK(ARRAY, 1)
int main()
{
    std::cout << BOOST_PP_ARRAY_ENUM(ARRAY);
    return 0;
}

BOOST_PP_ARRAY_PUSH_BACK实际上并没有修改ARRAY;它只是扩展到添加了新元素的ARRAY。例如,给定:

#define ARRAY (1, (dummy))

:

BOOST_PP_ARRAY_PUSH_BACK(ARRAY, 1)

扩展:

(2, (dummy, 1))

ARRAY仍将扩展为:

(1, (dummy))

不能通过宏替换来修改ARRAY的替换列表