Gibt es einen Grund, warum Lambdas mit einer leeren Capture-Liste nicht standardmäßig erstellt werden können?

9

C ++ 's Lambdas wären bequem in Templates zu verwenden, die Funktionsobjekte benötigen, aber leider können sie nicht standardmäßig konstruiert werden.

Wie in dieser Frage besprochen, ist dies für Lambdas sinnvoll, die eine nicht leere Capture-Liste haben.

C ++ - Lambda nach Typ typisieren

Kerrek erklärt:

  

Der Code macht keinen Sinn. Stellen Sie sich vor, Sie haben ein Capturing Lambda wie   das:

%Vor%      

Was könnte es bedeuten, ein Objekt vom Typ standardmäßig zu konstruieren?   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 etwas mehr als "der Standard sagt so"?

    
Praxeolitic 23.10.2015, 20:15
quelle

1 Antwort

4

Im Allgemeinen wurden Lambdas so wenig wie möglich spezifiziert, um bestimmte Anwendungsfälle zu lösen.

Andere möglicherweise nützliche Dinge, wie "ein Lambda, das nur trivial kopierbare Daten kopiert, müssen einfach kopierbar sein" wurde ebenfalls weggelassen. (Der Standard spezifiziert nicht, ob ein Lambda trivial kopierbar ist oder nicht)

Der Vorteil ist, dass Lambda einfacher zu implementieren ist, was wichtig ist. Der Nachteil ist, dass dies bestimmte Verwendungen ausschließt, die nicht im "intended" Set sind.

Wenn Sie denken, dass "ein Capture-freies Lambda einen Konstruktor mit Null-Argument haben muss", ist es wichtig, schlagen Sie es vor. Dies erfordert jedoch die Verwendung von Lambdas (einfache lokale Erfassung und Erstellung von Funktionsobjekten) und verwandelt sie in etwas anderes (einfache Erstellung von zustandslosen Funktionsobjekten, deren Typen weitergegeben werden können).

    
Yakk 23.10.2015, 20:43
quelle

Tags und Links