c++ - 如何通过另一个函数创建多个调用函数
问题描述
我正在尝试创建一个像这样的函数调用堆栈,但是这样它就可以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();
}
请记住,由于模板是在编译时解析的,因此任何体面的优化编译器几乎肯定会优化中间调用,因此您可能不会在堆栈跟踪中看到它们。请参阅此示例。
推荐阅读
- java - 从调用者获取 ClassLoader 对象
- javascript - 在 javascript 承诺中捕获特定类型的异常?
- h2 - 从 H2 控制台意外删除了设置。如何找回它们
- svelte - 在 div 而不是 body 上安装组件时出错
- tensorflow - LSTM 的输入应该是什么样子?
- julia - 如何在 Julia 中创建具有特定条件的 n 个数组的 0-1 组合
- webpack - 在 vue 组件中加载外部 JS 文件
- reactjs - 如何设置 React-Icon 样式
- python - 重新格式化 Beautiful Soup 输出以包含 CSS
- scala - Spark Scala 数据框具有单个 Group By 的多个聚合