Это пример lambda function.
C++ полон неясных углов, но по мере того как нечетный синтаксис идет, функции лямбда хорошо изучают. Основной синтаксис для объявления лямбда-функции - []() { }
. Это выражение, которое приводит к объекту определенного для реализации типа, который может быть вызван, как если бы он был функцией (поскольку где-то в реализации компилятора синтаксиса лямбда-выражения это - a функция).
Первое преимущество, которое это дает, заключается в том, что функция может быть объявлена встроенной с остальной частью кода вместо того, чтобы быть объявленной отдельно (что часто неудобно для очень коротких или специальных функций).
Самая мощная часть лямбда-выражений, однако, является их способность захвата переменных из окружающего контекста: Это то, что делает &
в примере кода. Лямбда, объявленная с [&]
, фиксирует все переменные (и неявный указатель this
, если используется внутри метода) по ссылке. (Там же [=]
захватить по значению, и даже расширенный синтаксис, чтобы захватить только определенные переменные определенным образом.)
Короче говоря, этот код:
m_time.Tick([&]() { ... });
вызывает Tick
метод на m_time
объекта, и передает ему лямбда-функцию, которая захватывает окружающий контекст посредством ссылки. Предположительно, тогда метод Tick
вызывает эту лямбда-функцию во время ее выполнения. В пределах ...
могут быть использованы переменные, доступные в области, в которой была объявлена лямбда, и эта способность захвата является самой мощной и удобной функцией лямбда.
Это синтаксис функции [лямбда-функции] (http://en.cppreference.com/w/cpp/language/ лямбда). – Cameron
@Cameron: эта ссылка идеальна. Является ли это слишком очевидным вопросом для полного ответа? Я хочу, чтобы вы повысили его за счет того, что вы, вероятно, спасли меня через несколько часов, выяснив, как google "[&}() {" – postitman
Описание Lambda: http://stackoverflow.com/questions/7627098/what-is-a- lambda-expression-in-c11 –