Kann die strukturierte Bindingsyntax in polymorphen Lambdas verwendet werden

8

Strukturierte Bindungen machen es sauberer und lesbarer, um durch eine Karte mit einem Bereich zu laufen, der auf einer Schleife wie unten basiert ist

%Vor%

Aber können strukturierte Bindungen in Lambda-Ausdrücken wie dem Folgenden verwendet werden?

%Vor%

Wie es aussieht, funktioniert der obige Code nicht mit dem Online-C ++ - Compiler, den ich hier gefunden habe Ссылка .

Wenn es nicht funktioniert, gibt es einen guten Grund, dass das oben genannte nicht unterstützt wird? Oder ist es nur etwas, das noch nicht vorgeschlagen wurde? Die Vorlage wird nur bei der Verwendung instanziiert, so dass der "Entbindungs" -Prozess der strukturierten Bindungen dort auftreten kann, wo die Instanziierung angefordert wird (d.h. wenn die Funktion aufgerufen wird)

    
Curious 07.08.2017, 07:18
quelle

1 Antwort

9

Dies ist derzeit nicht durch die Syntax erlaubt; strukturierte Bindungen sind eine einfache Deklaration :

  

einfache Deklaration : [...]
  - attributspezifizierer-seq opt decl-specifier-seq ref-qualifikator opt [ Bezeichnerliste ] Initialisierer ;

während Funktionsparameter durch eine Parameter-Deklarationsliste , die den Deklarator enthält :

  

Die Deklaratoren geben die Namen dieser Entitäten an und modifizieren (optional) den Typ der Spezifizierer mit Operatoren wie * (Zeiger auf) und () (Funktion gibt zurück).

Das heißt, eine strukturierte Bindung ist eine (Block-Level) Statementsyntax - Sie können dies sehen, indem Sie beachten, dass die Grammatik für sie in einem Semikolon ; endet. Wenn Sie strukturierte Bindungen in einer Lambda-Parameterliste zulassen, müssen Sie zusätzliche Grammatik hinzufügen.

Es klingt nach einer guten Idee, und ich kann nicht sofort irgendeine Zweideutigkeit in der Syntax sehen; es wäre sicherlich eine Diskussion wert, da es Ihren vorgestellten Anwendungsfall besser und prägnanter löst als die Alternativen.

    
ecatmur 07.08.2017, 07:55
quelle

Tags und Links