C++如何使用延续传递方式?

ach*_*how 9 c++ stack-overflow recursion continuations

假设在C++中,你在递归函数上做了太多的递归调用并且出现了堆栈溢出错误.

你会如何以延续传递方式重写它以避免堆栈溢出?

我在C++中描绘这个有点困难.

Voo*_*Voo 4

嗯,这是一个相当开放式的问题,但埃里克·利珀特(Eric Lippert)写了一个(实际上是两个)相当长的关于这个主题的系列。不完全是正确的语言,但它应该仍然很有帮助并给出总体思路。

虽然在 C++ 中实现 CPS 似乎只是为了修复单个递归函数而需要做很多工作,但当您可以使用某种算法使函数与队列迭代时(您仍然使用基本相同的数据量,但堆远远不够)限制较少)。

  • @highwind7777 如果你想实现闭包,函数指针并不完全有帮助。不知道 boost 是如何做到这一点的,但是您需要在某个地方进行存储,而不仅仅是指向可执行代码的指针。 (5认同)
  • @Voo:即使没有 C++11 lambda,也有 C++03 库可以轻松处理这个问题。参见例如[Boost.Phoenix](http://www.boost.org/libs/phoenix/)。 (3认同)