c++ - 在不知道名称的情况下调用相同的函数?

标签 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() { /*...*/ }

最佳答案

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

#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);
}

关于c++ - 在不知道名称的情况下调用相同的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38274499/

相关文章:

c++ - 哪种数据结构和算法适用于此?

c++ - 我可以在没有 C++ 的情况下学习 Win32 API(仅使用 C)吗?

c++ - 将轴坐标转换为像素坐标

c++ - 市场上有哪些书籍可用于学习使用 C++ 进行 GUI 开发的 Windows API?

c++ - 将数据从字节数组(带零)传递到 istringstream(stringstream)

c++ - 是否允许递增结束迭代器?

c++ - 为什么在 Windows XP 中拔下显示器后 Direct3D 无法恢复?

c++ - C 和 C++ 中的花括号

c++ - 使用 decltype 声明返回类型

c++ - 将树展平为链表c++,没有指针