2010-06-26 5 views
12

Ich habe Alexandrescus Buch, Modern C++ Design gelesen, und ich war ziemlich beeindruckt von den Techniken, die er verwendet, also wollte ich Loki library zu meiner Anwendung hinzufügen.C++: Verwenden Sie Loki oder Boost für Funktoren?

jedoch nach einem weiteren Untersuchung, sah ich, dass Boost, dass ich bereits verwenden, eine Menge ähnlicher Funktionalität bietet (nicht alle aber ich konnte nicht einen Singleton in Schub zum Beispiel finden)

I war vor allem daran interessiert, Loki zu verwenden, weil das Design auf Richtlinien basierte und die Funktoren.

Für mich beide, Boost und Loki haben Vor- und Nachteile. Das Hauptproblem, das ich mit loki habe, ist die schlechte Dokumentation (die Bibliothek ist nicht mehr an das Buch gebunden), aber es scheint mir, dass Loki in einigen Bereichen stärker und flexibler ist als Boost (ich könnte mich da irren)

Bevor Sie Boost oder Loki für Funktoren und Richtlinien verwenden, würde ich gerne die Meinung von Menschen kennen, die sie im wirklichen Leben verwenden.

Manchmal sieht es sehr gut auf dem Papier, sondern hat einige Nachteile, wenn man sich für echte verwenden :)

+4

Kein Singleton ist eines der besten Dinge an Boost. Das Letzte, was die Welt braucht, ist Ermutigung, * mehr * Singletons zu benutzen. – jalf

Antwort

4

Ich verwende Boost in meiner gesamten C++ - Umgebung wie eine Erweiterung der Standard-Bibliothek (mit VC9 und VC10).

Ich verwende es nicht auf allen Projekten.

Ich benutze es auf persönliche Projekte (meist Spiele), wo ich die volle Kontrolle über die Abhängigkeiten hatte.

Ich verwende Boost :: Funktion in einem großen Spiel-Projekt (mit mehreren anderen Bibliotheken von Boost).

Loki ist auch gut, aber ich habe nicht das Bedürfnis verspürt. Ich denke, der einzige Teil der Bibliothek, den ich verwenden möchte, ist der Singleton, aber ich benutze einen benutzerdefinierten, der für den Moment gut genug ist.

2

C++ 0x ist, was ich für eine schnellen Funktionsobjekte verwenden.

+2

Bitte korrigieren Sie mich, wenn ich falsch liege, aber C++ 0x wird weder von gcc noch von Visual Studio 2008 vollständig unterstützt, oder? – Dinaiz

+2

Nun, er fragte eindeutig Loki oder Boost. – fingerprint211b

+0

@Dinaiz: Sie können die neueste Version von GCC, die eine Menge von C++ 0x enthält einschließlich lambdas ich glaube, erhalten. VS2008 hat keine - aber Sie haben in Ihrer Frage keine Compiler angegeben. – Puppy

5

Eine Sache, die vielleicht in Betracht gezogen werden sollte, ist, dass Boost-Bibliotheken während der Annahme einen Peer-Review-Prozess durchlaufen müssen. Danach glaube ich natürlich, dass es wirklich sehr wenig Kontrolle darüber gibt, welche Veränderungen eintreten, aber zumindest gibt es eine Überprüfung, bevor sie akzeptiert werden. Loki ist nur die Vision eines Mannes. Natürlich ist Alexandrescu ziemlich gut, aber trotzdem ... es sind all seine Ideen und es gibt keine weitere Rezension.

12

Alexandrescu hatte sehr interessante Ideen (Typlisten, policy-basierte Klassenvorlagen, etc.), aber viele von ihnen wurden in Boost verbessert und mit einer größeren Anzahl von Compilern auf Portabilität und Korrektheit getestet.

Ich würde empfehlen, Boost wann immer möglich nur aus diesen Gründen zu bevorzugen. Nichtsdestotrotz bietet Modern C++ Design immer noch eine Menge Einblick in die Flexibilität von C++ und einen Einblick in die Denkweise einer Person (eine sehr gute), um eine Menge gängiger Programmierprobleme anzugehen.

Zum Beispiel richtlinienbasierte Smart-Pointer sind eine sehr nette Idee, aber wir können feststellen, warum die Boost-Autoren nicht Shared_ptr zu implementieren wählte und scoped_ptr auf diese Weise:

A. Parametrierung Benutzer abschreckt. Die shared_ptr Vorlage ist sorgfältig gefertigt, um allgemeine Bedürfnisse ohne umfangreiche Parametrisierung zu erfüllen.Eines Tages kann ein hochkonfigurierbarer Smart Pointer erfunden werden, der auch sehr einfach zu Verwendung und sehr schwer zu missbrauchen ist. Bis ist dann shared_ptr der intelligente Zeiger der Wahl für eine breite Palette von Anwendungen. (Bei Interesse an richtlinienbasierte Smart-Pointer sollte Moderne C++ Design by Andrei Alexandrescu lesen.)

Wenn Sie eine Vielzahl von Smart-Pointer tun müssen, und Sie und Ihr Team sind komfortabel ausgiebig mit Vorlage Parametrisierung arbeitet, Dann könnte ein richtlinienbasierter Ansatz zur Implementierung von Smartpointern für Sie funktionieren. Scoped_ptr und shared_ptr (zusammen mit weak_ptr) neigen jedoch dazu, die Aufgabe ziemlich gründlich zu erledigen. Das kombinatorische Verhalten von Policy-Klassen wird wahrscheinlich besser für etwas verwendet, für das es eine Vielzahl von nützlichen Kombinationen gibt.

Nichtsdestotrotz gibt es noch einige interessante Vorschläge von Alexandrescu, die Boost nicht angesprochen hat. MOJO, zum Beispiel, ist immer noch wirklich nützlich, bis Compiler einen besseren Job ausführen, um Move-Konstruktoren zu implementieren, oder bis wir Rvalue-Referenzen aus C++ 0x verwenden können. Er hat auch einige sehr interessante Gedanken über die Implementierung von Speicherzuordnern.

Für die Frage verwenden wir Teile von Loki, die für mojo in unserem kommerziellen Projekt benötigt werden, aber boosten meistens, wenn es angemessen ist.