如何多次附加到宏?

时间:2014-07-15 22:17:24

标签: c++ boost-preprocessor

使用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;
}

1 个答案:

答案 0 :(得分:2)

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的替换列表。