Ich habe im Internet viele Tutorials gelesen, in denen erklärt wurde, wie man Lambdas mit der Standardbibliothek verwendet (z. B. std::find
), und alle waren sehr interessant, aber ich konnte keine finden, die erklärten, wie ich ein Lambda für meine eigenen Funktionen verwenden kann.
Beispielsweise:
int main()
{
int test = 5;
LambdaTest([&](int a) { test += a; });
return EXIT_SUCCESS;
}
Wie soll ich deklarieren LambdaTest
? Was ist die Art des ersten Arguments? Und wie kann ich dann die an sie übergebene anonyme Funktion - zum Beispiel - "10" als Argument aufrufen?
std::function
ist auch in der Lage, Funktionsobjektklassentypen zu übernehmen, ist jedoch beim Aufrufen etwas langsamer. Aber dieser Unterschied ist für die meisten Anwendungen vernachlässigbar :)functor
die nett ist, aber nicht wirklich die ursprüngliche Frage beantwortet (und was mich hierher geführt hat), die lautete: "Wie verwende ich ein Lambda für meine eigenen Funktionen?" . Außerdem haben Vorlagen ihre eigenen Probleme, mit denen die Antwortstd::function
nicht übereinstimmt.Wenn Sie nicht alles vorlegen möchten, können Sie Folgendes tun:
quelle
std::function
(keine Referenz) speichern, erstellen Sie eine Kopie vonf
. Ich bin mir jedoch nicht sicher, wie Lambda / Closures mit Referenzen umgehen, wenn das Objekt, auf das verwiesen wird, außerhalb des Gültigkeitsbereichs liegt, wahrscheinlich UB. @FredOverflow: Mein Verständnis ist, dass diesstd::function
kein triviales Objekt ist, insbesondere beim Einwickeln von Lambdas. Es ist wahrscheinlich besser, darauf zu verweisen, um unnötiges Kopieren zu vermeiden.Ich möchte dieses einfache, aber selbsterklärende Beispiel beisteuern. Es zeigt, wie "aufrufbare Dinge" (Funktionen, Funktionsobjekte und Lambdas) an eine Funktion oder an ein Objekt übergeben werden.
quelle
if ( ! theFunction )