Per l'esempio specifico che hai fornito, catturare per this
è quello che vuoi. Concettualmente, catturare this
per riferimento non ha molto senso, dal momento che non è possibile modificare il valore di this
, è possibile utilizzarlo solo come puntatore per accedere ai membri della classe o per ottenere l'indirizzo dell'istanza di classe . All'interno della funzione lambda, se accedete a cose che implicitamente utilizzano il puntatore this
(ad esempio chiamate una funzione membro o accedete a una variabile membro senza utilizzare esplicitamente this
), il compilatore lo considera come se aveste usato lo this
. Puoi anche elencare più acquisizioni, quindi se vuoi catturare sia i membri che le variabili locali, puoi scegliere indipendentemente se catturarli per riferimento o per valore. Il seguente articolo dovrebbe darvi una buona base di lambda e catture:
https://crascit.com/2015/03/01/lambdas-for-lunch/
Inoltre, il vostro esempio utilizza std::function
come tipo di ritorno attraverso il quale il lambda viene passato al chiamante. Si noti che std::function
non è sempre così economico come si potrebbe pensare, quindi se si è in grado di utilizzare direttamente un lambda piuttosto che doverlo racchiudere in un std::function
, sarà probabilmente più efficiente. Il seguente articolo, pur non essendo direttamente correlato alla tua domanda originale, potrebbe comunque fornirti del materiale utile relativo a lambda e std::function
(vedi la sezione Un modo alternativo per memorizzare l'oggetto funzione, ma l'articolo in generale potrebbe essere di interesse) :
https://crascit.com/2015/06/03/on-leaving-scope-part-2/
fonte
2015-11-06 21:46:16
Grazie, dare un'occhiata. –