2009-02-24 4 views
7

Es gibt viele Orte in Boost, wo ich eine Vorlagenklasse sehe und kann nicht helfen, aber zu denken, warum die Person, die es schrieb, Vorlagen verwendete.Warum ist Boost so stark templated?

Zum Beispiel die Mutex-Klasse (n). Alle Mutex-Konzepte sind als Templates implementiert, bei denen man einfach einige Basisklassen oder abstrakte Klassen mit einer Schnittstelle erstellen kann, die dem Konzept entspricht.

bearbeiten nach Antworten: Ich dachte über die Kosten von virtuellen Funktionen nach, aber ist es nicht manchmal wert, sehr wenig Leistungseinbußen für besseres Verständnis zu verschenken? Ich meine manchmal (besonders mit Boost) ist es wirklich schwer zu templateten Code zu verstehen und Compiler-Fehler als Folge des Missbrauchs von Vorlagen zu entschlüsseln.

+0

wäre eine gute Frage zu diesem Typ: http://stackoverflow.com/users/5597/anthony-williams (Autor von boost.thread): p –

+0

Die Hauptphilosophie der C++ - Gemeinschaft ist, dass "Sie nur was bekommen Du fragst für". Das Boost-Projekt versucht genau wie die STL, dieser Philosophie zu folgen, indem alle Bibliotheken mit Hilfe von Vorlagen entworfen werden. Es gibt jedoch Kosten, wie Sie erwähnen: Verständnis leidet manchmal. Wenn Sie eine Bibliothek haben möchten, die Sie leichter verstehen können, sollten Sie sich vielleicht die Qt-Bibliothek ansehen. Es enthält viel von dem, was Boost tut, und mehr! Meiner Meinung nach erlaubt das Design von Qt eine groß angelegte C++ - Entwicklung, was Boost komplett fehlt. –

Antwort

20

Vorlagen können zur Kompilierzeit hoch optimiert werden, ohne dass virtuelle Funktionen erforderlich sind. Viele Template-Tricks können als kompilierbarer Polymorphismus betrachtet werden. Da Sie zur Kompilierungszeit wissen, welche Verhaltensweisen Sie möchten, warum sollten Sie für einen virtuellen Funktionsaufruf jedes Mal zahlen, wenn Sie die Klasse verwenden. Als ein Bonus kann viel Vorlagencode leicht inline werden, um sogar den grundlegendsten Function-Call-Overhead zu eliminieren.

Darüber hinaus sind Vorlagen in C++ extrem leistungsfähig und flexibel - sie haben sich als eigenständige Sprache erwiesen. Es gibt einige Dinge, die mit Templates leicht zu tun sind, die viel mehr Arbeit mit Laufzeitpolymorphismus erfordern.

3

Mit Vorlagen können Sie eine generische Version eines Algorithmus erstellen. Eine generische Version eines Containers. Sie müssen sich nicht mehr um Typen kümmern, und was Sie produzieren, muss nicht mehr an einen Typ gebunden sein. Boost ist eine Sammlung von Bibliotheken, die versucht, die Bedürfnisse einer Vielzahl von Menschen mit C++ in ihrem täglichen Leben zu erfüllen.