Es gibt viele Orte in Boost, wo ich eine Templates-Klasse sehe und ich kann nicht anders, als zu denken, warum die Person, die es geschrieben hat, Templates benutzt hat.
Zum Beispiel die Mutex-Klasse (n). Alle Mutex-Konzepte sind als Templates implementiert, wo man einfach einige Basisklassen oder abstrakte Klassen mit einer Schnittstelle erstellen kann, die dem Konzept entspricht.
edit after ansns: Ich habe über die Kosten von virtuellen Funktionen nachgedacht, aber lohnt es sich manchmal nicht, für ein besseres Verständnis sehr wenig Leistung zu verschenken? Ich meine manchmal (vor allem mit Boost) ist es wirklich schwer, Vorlagencode zu verstehen und Compilerfehler als Folge der missbräuchlichen Verwendung von Vorlagen zu entschlüsseln.
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 Bonus können viele Template-Code leicht inline werden, um auch den einfachsten 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 leicht mit Templates zu tun sind, die viel mehr mit Laufzeitpolymorphie arbeiten müssen.
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.