我想實現一個獲取Lambda回調作爲參數的C++函數。事情是,回調是從同一個(被調用的)類中的另一個函數異步啓動的。因此,我需要將Lambda存儲在成員變量中,以便可以通過需要啓動回調的異步函數來訪問它。將C++ Lambda存儲在要用作回調的成員變量中?
我嘗試了所有可以想到的方式來使用成員變量聲明,設置和調用Lambda,但代碼始終在作業或調用中崩潰。
這是我正在嘗試做的一個精簡版本。
聲明功能:
void function(const std::function<void()>callback);
調用從主代碼的函數:
myClass->function([](){cout << "Callback called";});
如果我從內function
它工作正常執行callback
,但我無法找到一個方法來將其存儲在成員變量(例如m_callback
)中,並從同一類的另一個函數調用它。
這個工作正常(即使在第二個異步函數中),當Lambda被定義爲內聯的時候,就像你的例子。但是,如果Lambda是傳遞給函數的參數,那麼thing.Action()僅適用於函數本身。它在異步函數中導致EXC_BAD_ACCESS。 –
@AmiramStark:你的問題幾乎可以保證是由於對對象生命週期和同步的不完全理解。然而,如果沒有一個更具代表性的例子,你很難給出任何建議,除了「寫出正確的代碼」恐怕。 –