gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:26:37 37 4
gpt4 key购买 nike

我想要的一个例子是:

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 的参数列表中使用它们。当我们想要捕获一大块文本然后将其同时替换到两个地方时,这就需要一个

至于有选择地扩展类型,只要您的所有类型都进行了类型定义,那是相当容易的。如果您必须处理有选择地扩展 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/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com