我想做我们可以用 C/C++ 预处理器对 D 的 mixins 做的同样的事情。我想写一个函数来生成一个参数列表。例如:
#define MK_FN_FOO(n,t) …
MK_FN_FOO(3,float)
/* it will expand into */
void foo(float x0, float x1, float x2) {
/* do something else here */
}
我有一些想法,但我面临一个问题。我必须做递归,我不知道我怎么能做这样的事情:
#define MK_FOO(n,t) void foo(MK_FOO_PLIST(n-1,t)) { }
#define MK_FOO_PLIST(n,t) t xn, MK_FOO_PLIST(n-1,t) /* how stop that?! */