Ho usato la funzione lambda per passarla alla funzione std::condition_variable
wait(), ma non è questo il caso. Uso le funzioni lambda che non ricevono alcun parametro e tutto è assolutamente chiaro per me. Ma non capisco assolutamente come viene usata la funzione lamdba che ha la lista dei parametri. Mostra lambda con parametri usati? Come passare parametri a loro?Funzione C++ 11 lambda - come passare il parametro
risposta
Visualizza lambda con i parametri vengono utilizzati? Come passare parametri a loro?
Funziona esattamente come con qualsiasi altro tipo di oggetto callable:
#include <iostream>
int main()
{
auto l = [] (int i) { std::cout << "The answer is " << i; };
l(42);
}
Notare inoltre, che non è necessario memorizzare una lambda in una variabile al fine di invocarlo. Quanto segue è un modo alternativo per riscrivere il programma sopra:
#include <iostream>
int main()
{
[] (int i) { std::cout << "The answer is " << i; } (42);
// ^^^^
// Invoked immediately!
}
il tipo di una funzione lambda (la cosiddetta "chiusura lambda") è definita dal compilatore, ed è un funtore con un operatore del call cui la firma è quella che specifichi quando definisci il lambda. Pertanto, si chiama un lambda esattamente come si chiamerebbe un funtore (cioè esattamente come si chiamerebbe una funzione - o qualsiasi oggetto callable).
Pertanto, se si desidera assegnare un lambda a un oggetto, è consigliabile lasciare che il compilatore ne deduca il tipo utilizzando auto
. Se non si vuole o non può utilizzare auto
, allora si può:
puntatori utilizzare la funzione per lambda non cattura (lambda cattura sono non convertibile di funzionare puntatori). Nel caso di cui sopra, in tal modo, il seguente funziona anche:
#include <iostream> int main() { void (*f)(int) = [] (int i) { std::cout << "The answer is " << i; }; f(42); }
Usa
std::function
(questo è sempre possibile, anche se la lambda sta catturando):#include <iostream> #include <functional> int main() { std::function<void(int)> f = [] (int i) { std::cout << "The answer is " << i; }; f(42); }
Amo quando le persone che possono spiegare lo fanno nel modo più semplice per tutti :) Grazie Andy !! –
@JohnnyPauling: Grazie per l'apprezzamento :) –
auto lambda = [] (int a, int b) { return a + b; };
assert(lambda(1, 2) == 3);
ahha! e qui auto nasconde int (* p) (int, int)? – Littlebitter
@Littlebitter il tipo di lambda è definito dall'implementazione, quindi è necessario 'auto'. Puoi convertire alcuni lambda (quelli che non catturano nulla) in puntatori di funzioni, ma questo non è il loro tipo effettivo (simile a come puoi convertire un 'int' in un' long', ma un 'int' non è un' long'). –
e se lambda sarà [] (int a, int b) -> int {return a + b; }; sarà possibile creare un puntatore alla variabile di funzione con il tipo I descritto, senza auto? – Littlebitter
È don' C'è anche bisogno di una variabile per tenere il tuo lambda - puoi chiamarlo direttamente:
std::cout << [](int n) { return n + 1 ; } (99) << std::endl ;
- 1. C++ 11 Funzione di passaggio come parametro lambda
- 2. C++ 11 variadic std :: parametro funzione
- 3. Come posso passare l'espressione lambda al modello C++ come parametro
- 4. C++ 0x lambda, come posso passare come parametro?
- 5. Passo lambda espressione all'argomento lambda C++ 11
- 6. Parametro/tipo di archiviazione per un lambda C++ 11
- 7. C++ 11 constexpr parametro di funzione passaggio
- 8. C++ 11 lambda come argomenti di funzione predefiniti
- 9. C++ 11 lambda a decltype
- 10. Come testare lambda in C++ 11
- 11. C++ 11 Lambda Passing with Capture
- 12. C point pointer con C++ 11 lambda
- 13. Espressione lambda C# come parametro del metodo
- 14. Modificare il parametro da funzione lambda a un'espressione lambda
- 15. È possibile associare il secondo parametro di una funzione lambda?
- 16. Lambda Funzione Con sconosciuta Parametro
- 17. Passare il parametro come finale in C#
- 18. Passare una funzione generica come parametro
- 19. Come vengono rappresentati e passati i lambda di C++ 11?
- 20. C++ 11 parametro ottimale passando
- 21. chiamata ricorsiva a lambda (C++ 11)
- 22. CGO, come passare parametro NULL alla funzione C
- 23. Come passare lista come parametro nella funzione
- 24. ricorsiva lambda L'implementazione in C++ 11
- 25. costante parametro stringa espressione in funzione 11 constexpr C++
- 26. Come passare il numero variabile di argomenti alla funzione lambda
- 27. Comprendere il sovraccarico delle funzioni lambda in C++ 11
- 28. Fare parametro modello di funzione senza segno in C++ 11
- 29. Passare una funzione come parametro modello esplicito
- 30. Passare una funzione (con parametri) come parametro?
Qualsiasi risorsa che trovi su lambda spiegherà come fare m prendere parametri. – chris
@chris So che hpw deve quindi prendere i parametri - [] (parametro int) {corpo lambda}, ma show userò questo lambda? – Littlebitter
Proprio come una funzione. – chris