2017-09-05 55 views
2

我想知道是否有這樣的事情是可能的。我也試過通過聲明上面的類和構造函數,然後在下面構造一個對象並讓構造函數運行所有行。它不接受構造函數定義的函數,即myclass::myclass() { /*definition*/}我可以轉發聲明一個lambda,以便它上面的代碼可以調用它嗎?

void present(); 
// I was hoping this would let the below code know of the lambda. 

if (GFX::bFPSLimitOn) { 
    if (frameLatency > 1.0/GFX::FPSLimit) present(); 
    else return; 
} else present(); 

auto present = [&]() { 
    GFX::clearScreen(); 
    GFX::renderScene(activeCamera); 
    GUI::renderGUI(); 
    GFX::presentScreen(); 
    lastFramePresentTimestamp = currentTime; 
}; 
+3

沒有。 lambda具有「不可改變的類型」並且不可構造。你必須在你聲明的地方定義它。 –

+2

通過這樣做你想達到什麼目的,而不是僅僅定義和向前聲明一個正常的函數? –

+1

你可以使用'std :: function'來達到這個目的。 –

回答

3

不,你不能向前聲明拉姆達。當你創建一個lambda時,你會得到一些編譯器生成的命名類類型。你不知道這個名字會是什麼,所以你不能轉發宣佈它。

如果您需要將其轉發聲明,那麼很可能您需要編寫一個函數,而您將知道該名稱。

相關問題