2012-02-07 63 views
2

我是lambda新手,我很難理解下面的lambda表達式的參數列表是如何工作的。在C++/CX中引用Lambda參數

的代碼是一個Facebook的身份驗證方法的一部分:

---------------- begin snippet ------------------ 

auto webAuthenticationOperation = WebAuthenticationBroker::AuthenticateAsync(WebAuthenticationOptions::Default, startURI, endURI); 

webAuthenticationOperation->Completed = ref new AsyncOperationCompletedHandler<WebAuthenticationResult^>([output, facebookOutput, facebookToken](IAsyncOperation<WebAuthenticationResult^>^ thisOperation) 
{ 
    if (thisOperation->ErrorCode.Value == 0) 

----------------some other stuff --------------- 

具體來說,我不知道thisOperation如何,實際上是指,因此目前正在處理的WebAuthenticationResult。

予讀取塊爲:

1)啓動一個異步認證

2.)的認證完成時,運行由拉姆達


但定義的函數lambda函數需要了解這個特定的認證操作(我假設有一些結果會在完成時返回給我們)。基於lambda的參數列表,它看起來像我們剛剛聲明瞭一個指向web身份驗證結果的指針,而沒有實際指向任何東西。

thisOperation是如何結束引用正確的對象?

+0

請注意,C++/CLI和C++/CX是不同的語言,儘管它們共享相同的語法。 C++/CLI定位CLI並使用垃圾收集對象模型; C++/CX以Windows運行時爲目標,並使用引用計數的基於COM的對象模型。 – 2012-02-07 06:15:46

回答

2

thisOperation是一個lambda參數。它的值在調用時作爲lambda表達式的參數提供。

當發生webAuthenticationOperationCompleted事件時,將調用您的lambda表達式,並以webAuthenticationOperation的結果作爲其參數。

+0

謝謝!我還應該補充一點,我的困惑來自我對Async使用模式的熟悉程度。顯然約定是: 1.)創建異步操作 2.)將on-complete處理程序設置爲lambda函數 3.)啓動異步操作 – nciao 2012-02-09 16:48:39