Я знайшов приклади, що вловлюють this
у лямбді явно, використовують це; наприклад:
capturecomplete = [this](){this->calstage1done();};
Але, мабуть, це також можна використовувати неявно; наприклад:
capturecomplete = [this](){calstage1done();};
Я перевірив це в g ++, і він склав.
Це стандарт C ++? (і якщо так, то яка версія) чи це якась форма розширення?
Я можу це бачити, але в той же час це здається жахливо багатослівним для того, що має бути простим завданням.
—
підключення
Я пам’ятаю, що у MSVC (можливо, лише 2015 рік) також виникли проблеми із захопленням
—
Flamefire
this
та використанням його в лямбда, що також може стати причиною явного використання
@plugwash: Розробники, як правило, завжди лінуються і хочуть мінімізувати речі, а дизайнери мови не відрізняються. Однак для розв’язання неоднозначності часто потрібна багатослівність, і це саме так.
—
Flater
this->
явного використання , яка полягає у тому, щоб чітко використані чітко захоплені значення. Зауважте, що[](){ calstage1done(); }
це не було б законно, оскількиthis
не було б захоплено; але при захопленніthis
явно, це дивно для функції тіла , щоб з'явитися на перший погляд не насправді використовувати захоплене значення:[this](){ calstage1done(); }
.