C ++ spezialisieren ein Lambda für einen bestimmten Typ [duplizieren]

9

Ich habe mit dem Lambda "Überladen" herumgespielt, wie es dargestellt ist hier und kam schnell zu dem Punkt, an dem ich es für zweckmäßig hielt, spezialisierte Lambda-Verschlüsse zu erstellen. Also war ich zum ersten Mal ein wenig versuchsweise, da mein vielversprechendster Versuch darin bestand,

zu sein %Vor%

Ein späterer Blick auf die cppreference zeigte jedoch, dass weder diese noch ähnliche Konstrukte erlaubt sind nach dem Standard.

Aus welchem ​​Grund werden solche Spezialisierungen nicht unterstützt?

Ich weiß, dass man dieses Verhalten mit SFINAE erreichen kann, aber dann ist es weniger lesbar, schwerer zu schreiben und fehleranfälliger. Natürlich kann man auch einfach eine Klasse mit einem passenden operator() schreiben, aber das ist soo C ++ 03: -)

Was wäre für eine solche Syntax?:

Ein Beispiel, das eine einfache Lambda "Überladung" wie im folgenden Code

ermöglichen würde %Vor%

Man kann dieses Verhalten z.B. mit SFINAE basierend auf der Technik in diese Antwort , aber wieder ... das ist scheiße.

Gibt es einen einfachen Workaround für SFINAE, um bestimmte Überladungen zu erhalten?

    
davidhigh 14.02.2016, 15:36
quelle

1 Antwort

2

Diese Art der Codierung mag zunächst überflüssig erscheinen, aber es gibt einige nette Eigenschaften, die wir nutzen können. In Bezug auf die von Ihnen erwähnte Stelle plante ich einen Teil 2, in dem ich eine gute Möglichkeit vorstelle, zu prüfen, ob ein Typ ein bestimmtes Mitglied hat (Funktion oder Daten). Angenommen, Sie möchten nach einer serialize -Memberfunktion suchen; anstelle von komplizierten Mechanismen habe ich festgestellt, dass es so einfach wird wie:

%Vor%

Demo

Die Besonderheiten der Standardesevolution können hier gefunden werden, aber der Grund, warum ich dies gepostet habe, ist, für eine solche Syntax zu plädieren was, wenn wir es gehabt hätten, könnte das obige erweitert werden zu partielle Ordnung unter "überladenen" generischen lambdas erlauben :

%Vor%     
Nikos Athanasiou 20.02.2016, 20:35
quelle