使用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;
}
答案 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
的替换列表。