高次関数をシミュレートするために他のマクロの引数としてマクロ名を与えるのは "安全"ですか?(高次の)マクロでどれくらいのことができますか?
I.e.足で自分を撃たないためにどこを見なければならないのですか?
ここではいくつかの抜粋は以下のとおりです。
#define foreach_even(ii, instr) for(int ii = 0; ii < 100; ii += 2) { instr; }
#define foreach_odd(ii, instr) for(int ii = 1; ii < 100; ii += 2) { instr; }
#define sum(foreach_loop, accu) \
foreach_loop(ii, {accu += ii});
int acc = 0;
sum(foreach_even, acc);
sum(foreach_odd, acc);
部分適用については、私はそれを何ができますか? :
#define foreach(ii, start, end, step, instr) \
for(int ii = start; ii < end; ii += step) { instr; }
#define foreach_even(ii, instr) foreach(ii, 0, 100, instr)
#define foreach_odd(ii, instr) foreach(ii, 1, 100, instr)
#define sum(foreach_loop, accu) \
foreach_loop(ii, {accu += ii});
int acc = 0;
sum(foreach_even, acc);
sum(foreach_odd, acc);
マクロ内にマクロを定義できますか?
#define apply_first(new_macro, macro, arg) #define new_macro(x) macro(arg,x)