0
假設N將小於或等於參數個數,我如何從VA_ARGS中提取[0 ... N]參數。C預處理器:從__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
...
那麼,你自相矛盾說,這是不可能的,他們展示了一個工作的例子。這就是我在代碼中完成的方式,但是我很好奇是否有更好的解決方案(可能帶有boost預處理器)。我完全不關心c-preprocessor之外的任何其他東西,因爲這個代碼是真正的c/C++項目的一部分。 – Pavel
我編輯了顯示我正在尋求避免的迭代方法的問題。 – Pavel
我覺得你有一個很好的例子在其他地方生成C++代碼(可能用'gpp',看起來像'cpp'友好) –