Примеры, которые я обнаружил, что захват thisв лямбде использует это явно; например:
capturecomplete = [this](){this->calstage1done();};
Но кажется, что это также возможно использовать неявно; например:
capturecomplete = [this](){calstage1done();};
Я проверил это в g ++, и это скомпилировано.
Это стандарт C ++? (и если да, то какая версия), или это какая-то форма расширения?
Я могу это видеть, но в то же время это кажется ужасно многословным для того, что должно быть простой задачей.
—
plugwash
Я помню, что у MSVC (возможно, только 2015 г.) также были проблемы с захватом
—
выражении,
thisи использованием его в лямбда-
@plugwash: разработчики, как правило, всегда ленивы и хотят минимизировать вещи, а дизайнеры языка ничем не отличаются. Тем не менее, многословие часто требуется, чтобы устранить неоднозначность, и это имеет место здесь.
—
Flater
this->явного использования , которое заключается в том, чтобы явно использовать зафиксированные значения. Обратите внимание, что[](){ calstage1done(); }это не будет законным, потомуthisчто не будет захвачено; но при захватеthisявно, это удивительно для функции тела , чтобы появиться на первый взгляд не на самом деле использовать захваченное значение:[this](){ calstage1done(); }.