PDA

Visualizza la versione completa : [c++]lambda functions


giuseppe500
27-04-2012, 16:40
ciao.
ho il seguente codice di una lambda function in c++:


int evenCount = 0;
for_each(v.begin(), v.end(), [&evenCount] (int n) {
cout << n;
evenCount++;
})


è possibile "catturare" piu di un parametro?
tra le [] e passarlo alla funzione?
come?
gioca un ruolo l'ordine dei parametri?

poi:
perchè sono utili(a parte essere piu intuitive e snelle) e cosa di piu anno dei function object?
grazie.

shodan
27-04-2012, 17:49
Originariamente inviato da giuseppe500
è possibile "catturare" piu di un parametro?
tra le [] e passarlo alla funzione?

Certo, basta esplicitarlo.


int evenCount = 0;
int altro_parametro=0;
for_each(v.begin(), v.end(), [&evenCount, altro_parametro, this] (int n) {
cout << n;
evenCount++;
})

In questo caso, però, solo evenCount è catturato per reference, gli altri per copia.


gioca un ruolo l'ordine dei parametri?

Non mi risulta.


perchè sono utili(a parte essere piu intuitive e snelle)

Ti è mai capitato di dover creare una funzione o function object da usare al volo, ma essere costretto a scrivere il relativo codice, sapendo che lo userai una volta sola? Ecco, quello.



e cosa di piu hanno dei function object?
grazie.
Le lambda functions sono function objects, solo che non occorre crearne apposta uno classico (C++03 style) per magari invocarlo una volta sola.

Qui trovi una spiegazione approfondita.
http://www.cprogramming.com/c++11/c++11-lambda-closures.html

Loading