首页 > 解决方案 > 如何通过另一个函数创建多个调用函数

问题描述

我正在尝试创建一个像这样的函数调用堆栈,但是这样它就可以caller_1_100

void callee(void) {
    // prints out final call stack
}
void caller_1_3(void) { callee(); }
void caller_1_2(void) { caller_1_3(); }
void caller_1_1(void) { caller_1_2(); }

我知道我可以使用递归函数来做到这一点,但现在我想尝试两种方式。

所以我想知道是否有一种方法可以在 C++ 中自动创建这种调用函数,因为我想让函数调用堆栈的深度至少下降 100。

但是,从我搜索的内容来看,在 C++ 中似乎不可能?我应该使用 python 或其他语言创建然后更改为 C++ 吗?

标签: c++

解决方案


您可以为您的基本案例使用专门化的函数模板。例如:

template <size_t I>
void caller_1()
{
    caller_1<I + 1>();
}

template <>
void caller_1<100>()
{
    callee();
}

请记住,由于模板是在编译时解析的,因此任何体面的优化编译器几乎肯定会优化中间调用,因此您可能不会在堆栈跟踪中看到它们。请参阅此示例


推荐阅读