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
...