Los ejemplos que he encontrado que capturan thisen una lambda lo usan explícitamente; p.ej:
capturecomplete = [this](){this->calstage1done();};
Pero parece que también es posible usarlo implícitamente; p.ej:
capturecomplete = [this](){calstage1done();};
Probé esto en g ++, y lo compilé.
¿Es este estándar C ++? (y si es así, qué versión), o es alguna forma de extensión?
                    
                        c++
                                lambda
                                this-pointer
                                
                    
                    
                        lavado
fuente
                
                fuente

this->explícitamente, que es garantizar que los valores capturados explícitamente se usen explícitamente. Tenga en cuenta que[](){ calstage1done(); }no sería legal, porquethisno sería capturado; pero cuando se capturathisde forma explícita, es sorprendente para el cuerpo de la función que aparece a simple vista no utilizar realmente el valor capturado:[this](){ calstage1done(); }.thisy se utiliza en un lambda que también podría ser una razón para usarlo de manera explícitaRespuestas:
Es estándar y ha sido así desde C ++ 11 cuando se agregaron lambdas. De acuerdo con cppreference.com :
fuente
Es completamente estándar y lo ha sido desde que las lambdas se introdujeron en C ++ 11.
No necesitas escribir
this->allí.fuente