在不知道名字的情况下调用相同的功能?

时间:2016-07-08 19:58:36

标签: c++

我正在寻找一种方法来调用相同的函数(使用不同的参数),而不知道函数名称。像这样:

void my_func(int x)
{
    //...
    SELF(x-5);
    //...
}

我需要使用上面的内容,因为我有一些复杂的宏。我需要这个的一个例子:

#define start_func if(id == 0) return SELF();

int A(int id) { start_func /*...*/ }
int B(int id) { start_func /*...*/ }
int C(int id) { start_func /*...*/ }
int D(int id) { start_func /*...*/ }
int E(int id) { start_func /*...*/ }
int F(int id) { start_func /*...*/ }

int A() { /*...*/ }
int B() { /*...*/ }
int C() { /*...*/ }
int D() { /*...*/ }
int E() { /*...*/ }
int F() { /*...*/ }

2 个答案:

答案 0 :(得分:1)

我想出了这个令人讨厌的东西,但它有点有效。它可以使用不同的参数调用自身,但不能使用相同的名称(重载)来调用不同的函数。此外,它不支持默认参数。

#define BEGIN_FUNC(ret, name, ...) ret name(__VA_ARGS__) { ret(*SELF)(__VA_ARGS__) = name;
#define END_FUNC }

BEGIN_FUNC(int, factorial, int n)
    return n == 0 ? 1 : n * SELF(n - 1);
END_FUNC

int main()
{
    factorial(5);
}

答案 1 :(得分:1)

您可以使用预定义变量__func__来获取当前函数的名称。这有帮助吗?