Boost.PP 序列限制为 256 个元素。为了解决这个问题,我想使用二维序列或序列序列,其定义如下:
((0)(1)(2)...(255))((256)(257))
现在,为了提供一个类似BOOST_PP_SEQ_FOR
的算法,我想像这样嵌套其中两个:
//Inner loop
#define ELEM_ID_OP(_, func, elem) func(elem)
#define FOR_ELEM(func, seq) \
BOOST_PP_SEQ_FOR_EACH(ELEM_ID_OP, func, seq)
//Outer loop
#define SEQ_ID_OP(_, func, seq) FOR_ELEM(func, seq)
#define FOR_SEQ(func, multiseq) \
BOOST_PP_SEQ_FOR_EACH(SEQ_ID_OP, func, multiseq)
//Testing function
#define MYFUNC(arg) \
const int arg = 0;
FOR_ELEM(MYFUNC, (Zero)(One)(Two)) //works like a charm
FOR_SEQ(MYFUNC, ((zero)(one)(two))) //doesn't :(
在第二个问题上,我收到了多个关于未声明标识符的错误:
错误 C2065:“ELEM_ID_OP”:未声明的标识符
错误 C2065:“MYFUNC”:未声明的标识符
错误 C2065:“零”:未声明的标识符
错误 C2065:“一”:未声明的标识符
错误 C2065:“二”:未声明的标识符
这是否意味着我的编译器的最大递归深度已达到,因此宏ELEM_ID_OP
不再MYFUNC
扩展?或者 Boost.PP 中是否有一个实现细节阻止它工作?有解决方法吗?
如果有帮助,我正在使用 VC++2013。