簡體   English   中英

有沒有一種方法可以防止通過引用捕獲lambda

[英]Is there a way to prevent lambda capture by reference

我處於依賴於lambda的現有代碼的重構之中。 在新版本的代碼中,我希望將調用推遲到lambda中,因此,我希望防止任何將來的用戶意外地被引用捕獲,以及使用編譯器查找所有有問題的現有代碼。

c ++ 11有可能嗎?

不會。它沒有太大幫助:一旦生存期超過當前范圍,就必須按值捕獲確保管理所有指針或引用的資源(以任何方式)的生存期。

異步回調與同步回調從根本上是不同的野獸,並且C ++類型系統無法在此處強制執行安全性。

即使解決了資源生存期問題,調用代碼也希望由lambda引起的更改立即發生,而現在卻沒有。 每次使用都必須針對新模式進行審核。

使用編譯器查找所有有問題的現有代碼。

這是可能的,但使用libtooling /鐺插件不平凡的 -但可能不會怎么你所期望的。

您可以編寫一個插件,該插件在編譯所有代碼后便會運行,並且該插件可以檢查在編譯代碼時clang生成的AST。 您可以遍歷AST以查找lambda,並檢查其捕獲列表的類型。 這很酷,但是文檔不是很好,這可能是一個耗時的過程。 一個一次性的項目可能不值得。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM