C++ 's Lambdas wäre bequem in Vorlagen zu verwenden, die Funktionsobjekte benötigen, aber leider können sie nicht standardmäßig erstellt werden.Gibt es einen Grund, warum Lambdas mit einer leeren Capture-Liste nicht standardmäßig erstellt werden können?
Wie in dieser Frage diskutiert, ist dies für Lambdas sinnvoll, die eine nicht leere Capture-Liste haben.
Instantiating C++ lambda by its type
Kerrek erklärt:
Der Code macht keinen Sinn. Stellen Sie sich einen Fang Lambda haben wie dies:
{ int n = 0; auto t = [&n](int a) -> int { return n += a; }; }
Was könnte es bedeuten, möglicherweise auf die Standard-Konstrukt ein Objekt vom Typ decltype (t)?
Was ist mit Lambdas mit einer leeren Capture-Liste? Gibt es einen Grund, warum diese auch keinen Sinn machen, um einen Default zu konstruieren? Gibt es mehr als "der Standard sagt so"?
Wie standardkonstruieren Sie einen Typ, der nicht angegeben ist? Und warum sollten Sie das tun, wenn Sie einer 'std :: -Funktion ein Lambda zuweisen können? – 101010
@ 101010 Der Typ ist 'declltype (t)' im Beispiel. Ein Lambda ist der 'std :: function' vorzuziehen, weil' std :: function' in diesem Fall eine unnötige Indirection einführt (es gibt keine Frage darüber, welche Funktion wir wollen und wir werden unsere Meinung später nicht ändern) plus die Lambda-Definition genau dort platziert werden, wo es gebraucht wird. – Praxeolitic