我正在尝试创建一个像这样的函数调用堆栈,但是它转到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 ++?
您可以针对基本情况使用专门化的功能模板。例如:
template <size_t I>
void caller_1()
{
caller_1<I + 1>();
}
template <>
void caller_1<100>()
{
callee();
}
请记住,由于模板是在编译时解析的,因此几乎所有肯定的优化编译器都可以肯定会优化中间调用,因此您可能不会在堆栈跟踪中看到它们。请参阅此示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句