lambda typ
-
Wenn ich folgenden code habe:
auto func = [](int Para1, float Para2)->float{return Para1+Para2;};wie müsste
autoexplizit ausgeschrieben ausehen?
-
Gar nicht.
http://stackoverflow.com/questions/3867276/can-the-type-of-a-lambda-expression-be-expressed
-
Gar nicht? und was ist damit:
std::function<float(int, float)> func = [](int Para1, float Para2)->float{return Para1+Para2;};Hab das gerade gefunden.
-
bei
string name = "Hallo";hat "Hallo" auch nicht den Typ string.
-
Der Lambda Ausdruck wird nicht konvertiert, std::function ist einfach nur ein Template, und der Typ des Arguments kann alles sein, was irgendwie "callable" ist.
Es gibt auch eine Lambda-To-Functionpointer Konvertierung, aber die ist recht neu. (VS kann das z.B. nicht.)
-
cooky451 schrieb:
Bashar schrieb:
bei
string name = "Hallo";hat "Hallo" auch nicht den Typ string.
Ich denke hier ist das etwas anders. Der Lambda Ausdruck wird nicht konvertiert, std::function ist einfach nur ein Template, und der Typ des Arguments kann alles sein, was irgendwie "callable" ist.
Worauf ich hinauswill ist, dass man aus der Initialisierung nicht schließen kann, dass der Typ des Lambdaausdrucks std::function<irgendwas> ist.
-
hmm, ok. Dachte es gibt irgendeinen "elementaren Typ", beim std::string wird ja intern auch noch ein char* verwaltet, da existiert der tatsächliche Typ immernoch.
Mal anders gefragt dann.
Häufig wird std::sort, welches eine Funktion als Parameter erwartet, als Beispiel rangezogen um lambdas zu benutzen.Wie sieht dann die Deklaration der Vergleichsfunktion von sort aus?
-
sort ist, genau wie function, ein Template. Der Typ wird automatisch bestimmt. Siehe z.B. auch die anderen Algorithmen wie find_if
http://www.cplusplus.com/reference/algorithm/find_if/Du kannst einen Funktionszeiger oder ein Funktionsobjekt (Funktor) übergeben, solange man es entsprechend aufrufen kann, funktioniert es.