Ссылка на лямбда-параметры в C ++ / CX - PullRequest
2 голосов
/ 07 февраля 2012

Я новичок в лямбда-выражениях, и мне трудно понять, как работает список параметров следующего лямбда-выражения.

Код является частью метода аутентификации 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 в конечном итоге ссылается на правильный объект?

1 Ответ

2 голосов
/ 07 февраля 2012

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

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

...