gpt4 book ai didi

c++ - 在 C++ 中,我可以使用函数指针表来跳转(而不是调用)函数吗?

转载 作者:太空狗 更新时间:2023-10-29 20:02:00 31 4
gpt4 key购买 nike

在 C++ 中,我可以使用函数指针表来跳转(而不是调用)函数吗?我知道如何制作和调用跳转表,但我正在构建一个扫描仪并希望在例程之间高效地跳转,所以我想进行一次跳转,以便将相同的堆栈帧用于目标例程。我将使配置文件相同。

最佳答案

不,你不能,但是有一个众所周知的模式可以避免在重复查找过程中堆栈帧的积累:Continuation-Trampoline Style。

取而代之的是:

void scanner1( ... )
{
fn_table[next]();
}

这样做:

int scanner2( ... )
{
return next;
}

while ((next = fn_table[next]()) != END) {}

因为在每次调用之前都有一个返回,所以堆栈深度不会增加。

另一个好处是,如果您想添加对所访问状态的跟踪,您可以在单个点(在蹦床处理循环内)而不是分散在所有扫描器函数中。

如果有状态要传递给下一个处理程序,它会变得更加复杂,但不会太多(例如,使用输出参数而不是返回值,或者返回一个指向仿函数对象的智能指针,例如 std::function<void()> 具有参数预先绑定(bind))。

这也包括在内in the wikipedia article on tail recursion .

关于c++ - 在 C++ 中,我可以使用函数指针表来跳转(而不是调用)函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48271048/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com