回答
那么这是一个相当开放的问题,但Eric Lippert写了一个(实际上是两个)而不是long series about exactly this topic。不完全正确的语言,但它应该仍然是相当有用的,并给出总体思路。
尽管在C++中实现CPS似乎只是修复单个递归函数的很多工作,但您可以使用某种算法使该函数与队列迭代(您仍然使用基本相同的数据量,但该堆远不如限制)。
我在将词汇关闭作为内置语言功能的语言环境中编写了这两个系列的独特优势。将C++代码重写为闭包当然是完全可以实现的,但这会有点痛苦。 –
@EricLippert你是对的我假设C++ 11 lambda表达式,但显然不是每个人(甚至不接近大多数)有一个支持lambdas的编译器。没有它,它会变得更加复杂(使用类并将其推广到大概?)。顺便说一句,谢谢你的伟大的文章 - 没有你,我甚至不知道什么CPS是:) – Voo
@Voo:即使没有C++ 11 lambda,也有C++ 03库处理这种平凡。见例如[Boost.Phoenix](http://www.boost.org/libs/phoenix/)。 – ildjarn
- 1. 转换为CPS(延续传递样式)
- 2. 如何在使用Future.flow时执行错误处理 - CPS延续传递样式
- 3. 使用延续传递风格
- 4. F#延续传递折返
- 5. 如何为此Func调用编写继续传递样式?
- 6. 延续传递风格和元素
- 7. 撰写Task.async_stream与延续传递
- 8. 如何C#使用持续传递的风格和总结
- 9. 延迟传递值如何?
- 10. 继续传递样式vs积极修剪调用堆栈?
- 11. 何时以及如何使用延续传球风格
- 12. 使用Seaside延续
- 13. 如何使用RxJava Observables进行延续?
- 14. 用于传递c样式NSStrings数组的Objective-c语法
- 15. 用延续传递风格重写f#函数
- 16. 使用延续到二进制递归转换为尾递归
- 17. 使用Google云消息传递特意延迟传递
- 18. 样式格式续
- 19. c#调用C++如何传递值unit8
- 20. 如何在C中传递连续数组作为参数?
- 21. 如何实现延续?
- 22. 如何传递判别式ada的持续时间?
- 23. 延续传球风格让事情尾巴递归?
- 24. clojure是否允许线延续?如果是这样,怎么样?
- 25. 延续和隐式转换
- 26. 函数完成执行后继续循环。对于如何使用jQuery递延
- 27. 如何在Scala中启用延续?
- 28. c#如何连续调用onpaint没有延迟
- 29. 如何在Java下使用Saxon将参数传递给我的xslt样式表?
- 30. Objective-C中使用传递引用C
对于这样一个抽象问题,你不会得到任何东西,只能得到抽象的答案。也许你应该发布导致堆栈溢出的示例函数,然后你会得到如何解决它的具体答案。 (亲自尝试重写函数以使用累加器,然后重写它以使用延续...) – ildjarn
您来到了正确的位置。 –
@ildjarn,感谢您的通知。我其实在寻找一个抽象的答案。如果我使用累加器,是不是最终将它重写为C++中的正常迭代? – achow