Frage

Was könnte der beste Weg, um zu starten Boost Lambda-Bibliotheken Programmierung.

War es hilfreich?

Lösung

Rest innerhalb der Grenzen der Sprache C ++ und Bibliotheken, würde ich in der Programmierung zum ersten Mal verwendet schlägt vor STL-Algorithmus Funktionsschablonen verwendet wird, als eine der am häufigsten Gebrauch Sie für Auftrieb haben :: Lambda Funktors Klassen mit inlined Ausdrücke ersetzen inlined.

Die Bibliothek Dokumentation selbst gibt Ihnen ein Upfront-Beispiel dafür, was es gibt es für:

for_each(a.begin(), a.end(), std::cout << _1 << ' ');

Dabei gelten std::cout << _1 << ' ' erzeugt ein Funktionsobjekt, das, wenn sie aufgerufen wird, sein erstes Argument des cout Stream schreibt. Dies ist etwas, das Sie mit einer benutzerdefinierten Funktor Klasse, std::ostream_iterator oder einer expliziten Schleife tun könnten, aber boost :: Lambda gewinnt in Prägnanz und Klarheit wahrscheinlich -. Zumindest wenn man die funktionalen Programmierkonzepte verwendet wird

Wenn Sie (Über-) die STL verwenden, können Sie sich in Richtung boost gravitierende finden :: bind und boost :: Lambda. Es kommt wirklich praktisch für Dinge wie:

std::sort( c.begin(), c.end(), bind(&Foo::x, _1) < bind(&Foo::x, _2) );

Bevor Sie zu diesem Punkt, nicht so sehr. So STL-Algorithmen verwenden, Ihre eigenen functors schreiben und sie dann übersetzt in Inline-Ausdrücke mit boost :: lambda.

Aus professioneller Sicht, glaube ich, der beste Weg, mit Boost zu beginnen :: Lambda ist die Nutzung von Schub zu bekommen :: bind verstanden und akzeptiert. Die Verwendung von Platzhalter in einem boost :: bind Ausdruck sieht viel weniger magisch als „nackter“ boost :: Lambda-Platzhalter und findet leichte Akzeptanz bei Code-Reviews. Jenseits Grund boost :: Lambda-Nutzung ist ziemlich wahrscheinlich, dass Sie Trauer von Ihren Mitarbeitern bekommen, wenn Sie in einem bleeding-edge C ++ Shop sind.

Versuchen Sie nicht über Bord zu gehen -. Es sind Zeiten, wann und Orte, an denen ein for-Loop wirklich ist die richtige Lösung

Andere Tipps

Kommt drauf an. Sie sind bereits gut in der funktionalen Programmierung Konzepte versiert? Wenn nicht, würde ich vorschlagen, dass Sie in einer Sprache starten, die für die funktionale Programmierung ausgelegt ist statt einer prozeduralen Sprache mit funktionellen Merkmalen geheftet auf. Wenn Sie nicht zu Codierung in einem funktionalen Stil verwendet werden (es ist nicht härter unbedingt, aber es ist auf jeden Fall anders), dann haben Sie mehr Zeit im Kampf gegen die Syntax verbringen und nicht genug Zeit für das Erlernen Sachen zu erledigen .

Was wo ich anfangen soll, schnitt ich meine funktionellen Zähne auf Schema, aber es gibt viele gute Möglichkeiten.

Wenn Sie mit einem einigermaßen letzten Compiler arbeiten, können Sie boost. Wenn es nicht schon auf Ihrem Rechner ist, installieren Sie es (sudo apt-get install libboost-dev auf unbuntu, bekommen Sie die Binärdateien aus boost.org, wenn Sie auf Windows sind). Lesen Sie die doc rel="nofollow 's dann schauen Sie sich Ihre bestehenden Code für Situationen, in denen Sie sie verwenden können. Haben Sie eine Menge Code-Duplizierung, die beseitigt werden könnte, wenn Sie eine Funktion mit einem kleinen Stück Code parametrisiert, zum Beispiel?

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