In letzter Zeit bin ich sehr aufgeregt über die Unterstützung von Lambda in VC2010. Ich beginne langsam, das volle Potenzial zu nutzen, das dieses Feature hat, um C ++ in etwas viel Besseres zu verwandeln.
Aber dann erkannte ich, dass dieses Potenzial stark von der Unterstützung von Labdas in alltäglichen Bibliotheken wie Boost und QT abhängt Weiß jemand, ob es Pläne gibt, diese Bibliotheken um die neuen Funktionen von C ++ 0x zu erweitern?
lambdas ersetzen praktisch die Notwendigkeit von boost :: lambda und alles in Boost, das damit interagiert.
QT könnte Unterstützung für Lambdas in allen ihren Containern hinzufügen und vielleicht sogar als eine alternative Möglichkeit, SLOT
s zu definieren
Lambdas passen schon sehr gut in bestehende Bibliotheken - überall, wo eine Funktion ein Funktionsobjekt eines Typs akzeptiert, der durch einen Template-Parameter gegeben ist.
Dies ist eines der großen Dinge an ihnen - sie sind ein klassisches Beispiel für eine Spracheigenschaft, die existierende Praxis in einer raffinierten Syntax kodifiziert.
Offensichtlich wird die Boost-Lambda-Bibliothek überflüssig, aber das bedeutet, dass keine neuen Features hinzugefügt werden müssen.
Ich sehe nicht, wie die Verwendung von Lambda von der Unterstützung durch Bibliotheken abhängt. Lambdas machen es überflüssig, viele Klassen zu erstellen, nur um verschiedene kleine Algorithmen zu integrieren und nahtlos mit anderen Sprach- / Bibliotheksfunktionen zusammenzupassen ( std::function
kommt mir in den Sinn). Wo auch immer Sie ein Funktionsobjekt oder einen Funktionszeiger übergeben haben, können Sie auch Lambdas verwenden.
Sie fügen also hauptsächlich eine weitere Alternative hinzu, um vorhandenen Code und Bibliotheken zu nutzen. Der einzige Weg, den ich für Bibliotheken sehen kann, um Lambda besser zu unterstützen, ist die Verwendung von mehr funktionalen Ansätzen.
Dies ist NICHT wahr, Sie können boost :: lambda nicht durch C ++ 0x Lambda ersetzen. Siehe hier aus einigen Gründen (über Boost-Bindung, aber ich denke, das meiste davon überträgt)
Auch @daniel dies könnte Ihnen dabei helfen begann mit Lambda-Funktionen / Boost Bind für Slots. Es macht mein Leben unglaublich einfach.
Zusätzlich, @litb aus meinen Quellen, Lambda werden nicht geändert werden (argh)
Die meisten Bibliotheken verwenden Standardfunktionszeiger für Rückrufe. C ++ 0x-Lambdas können als Funktionszeiger verwendet werden, so dass die meisten Bibliotheken nicht modifiziert werden müssen. Andere Bibliotheken verwenden Vorlagen, so dass sie jedes aufrufbare Objekt übernehmen können (z. B. std::foreach
müsste nicht geändert werden).
Das einzige andere C ++ 0x-Feature, an das ich denken kann, dass sich Bibliotheken ändern könnten, ist die stark typisierte enums
. Außerdem können Bibliotheken extern
templates verwenden, um die Kompilierungszeiten zu reduzieren.