2012-02-07 4 views
2

Я новичок в лямбда, и мне трудно понять, как работает список параметров лямбда-выражения.Ссылка на лямбда-параметры в C++/CX

код является частью метода аутентификации 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.), когда аутентификация завершена, запустите функцию, определенную лямбда


Но лямбда-функция должна знать об ЭТОЙ конкретной операции аутентификации (я предполагаю, что есть какой-то результат, который возвращается нам после его завершения). Основываясь на списке параметров лямбда, похоже, что мы только что указали указатель на результат веб-аутентификации, фактически не указав его ни на что.

Как это thisOperation заканчивается ссылкой на правильный объект?

+0

Обратите внимание, что C++/CLI и C++/CX - это разные языки, хотя они имеют общий синтаксис. C++/CLI нацеливается на CLI и использует модель собранного мусора; C++/CX предназначается для выполнения Windows Runtime и использует объектную модель на основе COM-объектов. –

ответ

2

thisOperation - параметр лямбда. Его значение предоставляется в качестве аргумента для выражения лямбда при его вызове.

Когда событие webAuthenticationOperation возбуждено, ваше лямбда-выражение вызывается с результатом webAuthenticationOperation в качестве аргумента.

+0

Спасибо! Я также должен добавить, что из-за моего незнания с шаблоном использования Async я пришел к путанице. Видимо, конвенция идти: 1.) Создайте операцию асинхронной 2.) Установите на заполнение обработчик функции лямбда 3.) Запустить Async операции – nciao

 Смежные вопросы

  • Нет связанных вопросов^_^