我想要的一个例子是这样的:
char const * bar (T1 x, T2 y) {
return "bar";
}
char const * foo (T1 z, T2 w) {
return bar(__PARAMS__);
}
应该扩展到
char const * bar (T1 x, T2 y) {
return "bar";
}
char const * foo (T1 z, T2 w) {
return bar(z, w);
}
有没有办法可以远程实现这样的事情而无需手写?
原因:这将有助于我想要实现的代码生成方案的模板元编程。它允许我逐字复制并粘贴这些行。围绕(咳咳!)行的一些东西
void f0 () {
DumpCode(__PARAMS__); // DumpCode();
}
void f1 (T1 x) {
DumpCode(__PARAMS__); // DumpCode(x);
}
void f2 (T1 x, T2 y) {
DumpCode(__PARAMS__); // DumpCode(x, y);
}
最佳答案
在 C 甚至 C++ 中,无法以编程方式获取当前函数参数的名称或类型,也无法获取当前函数本身。他们让你得到的最接近的东西是__func__
,它只是当前函数名称的字符串表示。
因此,您必须在某处捕获参数名称,以便可以在参数列表以及 DumpCode
的参数列表中使用它们。当我们想要捕获一段文本,然后将其一次替换到两个位置时,就需要一个宏。
至于有选择地扩展类型,只要所有类型都经过 typedef 处理,就相当容易。如果您必须有选择地扩展 int (*x)()
与 x
,则必须重构此代码,使其变得更加丑陋。
#define PARAMS(x) x
#define ARGS(x)
#define P(TYPE) TYPE(T1) z, TYPE(T2) w
char const * foo (P(PARAMS)) {
return bar(P(ARGS));
}
#undef P
#define P(TYPE)
void f0 (P(PARAMS)) {
DumpCode(P(ARGS)); // DumpCode();
}
#undef P
#define P(TYPE) TYPE(T1) x
void f1 (P(PARAMS)) {
DumpCode(P(ARGS)); // DumpCode(x);
}
#undef P
#define P(TYPE) TYPE(T1) x, TYPE(T2) y
void f2 (P(PARAMS)) {
DumpCode(P(ARGS)); // DumpCode(x, y);
}
#undef P
关于c++ - 获取所有函数参数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11479505/