获取所有函数参数名称
Get all function parameter names
我想要的一个例子是:
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’ed,这就相当容易。如果您必须有选择地扩展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
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类