c++ - 获取所有函数参数名称

标签 c++

我想要的一个例子是这样的:

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/

相关文章:

c++ - cpack 创建 zip 而不在 zip 中创建自命名目录

c# - 为什么从针对任何 CPU 的 C# 项目调用时,此代码会抛出 System.AccessViolationException?

c++ - 将自定义属性分组到 Maya 中的节点

c++ - typeinfo pragma 可见性错误

c++ - 使用宏将#ifdef 放在代码中

c++ - 函数调用歧义(用户自定义转换和Derived2Base指针转换)

c++ - RAII std::vector 设计难题

c++ - boost IPC managed_memory_segment bad_alloc

c++ - C++中如何管理依赖关系

c++ - d2d1debug3.dll!DebugRenderTarget::EndDraw 访问冲突