0

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

1 回答 1

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

于 2014-07-15T22:22:36.863 回答