Frage

In letzter Zeit wurde ich habe immer sehr aufgeregt über die Unterstützung für die Lambda-Ausdrücke in VC2010. Ich fange langsam bei der Umwandlung von C ++ in etwas viel besser, das volle Potenzial dieser Funktion hat zu erreichen.

Aber dann wurde mir klar, dass dieses Potenzial hängt stark von Hauptstrom Unterstützung von Lambda-Ausdrücke in der täglichen Bibliotheken wie Boost und QT.
Weiß jemand, ob es Pläne gibt, diese Bibliotheken mit den neuen Features von C ++ 0x?

erweitern

lambdas ersetzen praktisch die Notwendigkeit für boost :: Lambda und alles in Auftrieb, die mit ihm in Wechselwirkung tritt. QT könnte Unterstützung für Lambda-Ausdrücke in all ihren Container hinzufügen und vielleicht sogar als Alternative SLOTs definieren

War es hilfreich?

Lösung

Lambdas passen schon sehr gut in bestehende Bibliotheken - überall dort, wo eine Funktion ein Funktionsobjekt eines Typs von einem Template-Parameter gegeben akzeptiert

.

Dies ist einer der großen Dinge über sie - sie ein klassisches Beispiel für eine Sprache-Funktion sind, die bestehende Praxis in einem geschickten Syntax kodifiziert

.

Offensichtlich ist die Boost-Lambda-Bibliothek wird überflüssig, aber das bedeutet, dass es keine neue Funktionen benötigt, um es hinzugefügt werden.

Andere Tipps

Ich sehe nicht, wie Verwendung von Lambda auf Unterstützung von Bibliotheken abhängt. Lambdas eliminieren die Notwendigkeit, viele Klassen zu erstellen, verschiedene kleine Algorithmen zu wickeln und ordentlich mit anderen Sprache / Bibliotheks-Features zusammen passen (std::function den Sinn kommt). Wo auch immer Sie verwendet entweder ein Funktionsobjekt oder einen Funktionszeiger zu übergeben, können lambdas auch verwendet werden.

So sie in erster Linie eine weitere Alternative hinzufügen zur Verwendung vorhandener Code und Bibliotheken machen. Die einzige Möglichkeit, die ich für Bibliotheken zum besseren Unterstützung von Lambda sehen kann, ist funktionaler Stil Ansätze verwenden.

Die Chancen stehen solche Bibliotheken warten wollen, bis es gibt richtige Compiler-Unterstützung für die entsprechenden C ++ 0x-Features, und nicht viel Mühe mit ihm, bis den Mainstream-Compiler es unterstützen. Halten Sie nicht Ihren Atem.

Das ist nicht wahr, kann man nicht ersetzen boost :: Lambda mit C ++ 0x Lambda. Siehe hier für einige Gründe (etwa boost binden, aber ich denke, die meisten davon überträgt)

Auch @ Daniel this könnte Ihnen helfen, Lambda-Funktionen / Boost-bind für Slots beginnen mit. Es macht mein Leben unglaublich einfach.

Darüber hinaus @litb aus meinen Quellen, Lambda-Ausdrücke wird nicht geändert werden (argh)

Die meisten Bibliotheken verwenden Standard-Funktionszeiger für Rückrufe. C ++ 0x lambdas können als Funktionszeiger verwendet werden, so dass die meisten Bibliotheken nicht geändert werden müssen. Andere Bibliotheken verwenden Vorlagen, so dass sie jede aufrufbare Objekt ausführen können (z std::foreach nicht geändert werden müssen).

Die einzige andere C ++ 0x-Funktion, die ich mir vorstellen kann, dass die Bibliotheken ändern könnten stark typisierte enums verwendet. Auch Bibliotheken könnten beginnen extern Vorlagen zu verwenden, um Kompilation Zeiten zu reduzieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top