假设 N 将小于或等于参数的数量,我如何从VA_ARGS中提取 [0...N] 参数。
例子:
#define MY_SEQ r0, r1, r2, r3, r4, r5, r6, r7, \
r8, r9, r10, r11, r12, r13, r14, r15
#define EXTRACT_N(n, SEQ) {... magic ...}
...
EXTRACT_N(5, (MY_SEQ()));
should expand to:
{r0, r1, r2, r3, r4};
可以假设序列元素的形式为 WHATEVER##N,其中 N 是第 N 个元素。
我正在寻找一些不错的解决方案来解决这个问题,而不是使用 BOOST,例如,我想了解它是如何完成的。
我使用迭代方法做到了,但我想知道是否有其他方法可以做到这一点。这是我实现它的方式:
#define EXTRACT_1(t0) t0
#define EXTRACT_2(t0, t1) EXTRACT_1(t0),t1
#define EXTRACT_3(t0, t1, t2) EXTRACT_2(t0, t1),t2
#define EXTRACT_4(t0, t1, t2, t3) EXTRACT_3(t0, t1, t2),t3
...