回答
那麼這是一個相當開放的問題,但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. 使用延續傳遞風格
- 3. Python的傳遞與延續
- 4. F#延續傳遞折返
- 5. 如何爲此Func調用編寫繼續傳遞樣式?
- 6. 繼續傳遞Objective C中的樣式代碼
- 7. 撰寫Task.async_stream與延續傳遞
- 8. 延續傳遞風格和元素
- 9. 如何C#使用持續傳遞的風格和總結
- 10. 延遲傳遞值如何?
- 11. 繼續傳遞樣式vs積極修剪調用堆棧?
- 12. 何時以及如何使用延續傳球風格
- 13. 如何用JavaScript延遲CSS樣式?
- 14. 使用Seaside延續
- 15. 如何使用RxJava Observables進行延續?
- 16. 用於傳遞c樣式NSStrings數組的Objective-c語法
- 17. 用延續傳遞風格重寫f#函數
- 18. 使用延續到二進制遞歸轉換爲尾遞歸
- 19. 使用Google雲消息傳遞特意延遲傳遞
- 20. 樣式格式續
- 21. 計劃 - 使用延續
- 22. c#調用C++如何傳遞值unit8
- 23. 如何將post值傳遞給會話以供後續使用?
- 24. 如何在C中傳遞連續數組作爲參數?
- 25. 如何實現延續?
- 26. 如何傳遞判別式ada的持續時間?
- 27. clojure是否允許線延續?如果是這樣,怎麼樣?
- 28. 延續和隱式轉換
- 29. 延續傳球風格讓事情尾巴遞歸?
- 30. 函數完成執行後繼續循環。對於如何使用jQuery遞延
對於這樣一個抽象問題,你不會得到任何東西,只能得到抽象的答案。也許你應該發佈導致堆棧溢出的示例函數,然後你會得到如何解決它的具體答案。 (親自嘗試重寫函數以使用累加器,然後重寫它以使用延續...) – ildjarn
您來到了正確的位置。 –
@ildjarn,感謝您的通知。我其實在尋找一個抽象的答案。如果我使用累加器,是不是最終將它重寫爲C++中的正常迭代? – achow