Zwei Beispiele für Bibliotheken, die moderne C ++ - Konstrukte verwenden:
- Sowohl die Eigen- als auch die Gürteltierbibliothek (lineare Algebra) verwenden mehrere moderne C ++ - Konstrukte. Beispielsweise verwenden sie beide Ausdrucksvorlagen, um arithmetische Ausdrücke zu vereinfachen, und können manchmal einige temporäre Ausdrücke eliminieren:
http://eigen.tuxfamily.org
http://arma.sourceforge.net/
http://hpac.rwth-aachen.de/teaching/sem-accg-14/Armadillo.pdf (Präsentation zu Ausdrucksvorlagen in Armadillo)
- Die CGAL-Bibliothek (Computational Geometry) verwendet viele moderne C ++ - Funktionen (es werden häufig Vorlagen und Spezialisierungen verwendet):
http://www.cgal.org
Hinweis:
Moderne C ++ - Konstrukte sind sehr elegant und können sehr unterhaltsam sein. Es ist sowohl eine Stärke als auch eine Schwäche: Wenn Sie sie verwenden, ist es so verlockend, mehrere Ebenen von Vorlagen / Spezialisierungen / Lambdas hinzuzufügen, dass Sie am Ende manchmal mehr "Administration" als effektiven Code im Programm erhalten (mit anderen Worten, Ihr Programm "spricht" mehr über das Problem als über die Beschreibung der Lösung. Das richtige Gleichgewicht zu finden ist sehr subtil. Schlussfolgerung: Man muss die Entwicklung des "Signal / Rausch" -Verhältnisses im Code verfolgen, indem man misst :
- Wie viele Codezeilen im Programm?
- Wie viele Klassen / Vorlagen?
- Laufzeit ?
- Speicherverbrauch?
Alles, was die ersten beiden erhöht, kann als Kosten betrachtet werden (weil es das Programm möglicherweise schwieriger zu verstehen und zu warten macht), alles, was die letzten beiden verringert, ist ein Gewinn .
Beispielsweise kann das Einführen einer Abstraktion (einer virtuellen Klasse oder einer Vorlage) den Code faktorisieren und das Programm vereinfachen ( gain ). Wenn sie jedoch niemals nur einmal abgeleitet / instanziiert wird, entstehen Kosten für keinen damit verbundenen Gewinn (wiederum ist dies der Fall) subtil, weil der Gewinn später in der zukünftigen Entwicklung des Programms eintreten kann, daher gibt es keine "goldene Regel").
Der Komfort des Programmierers ist auch ein wichtiger Faktor, der beim Kosten-Nutzen-Verhältnis berücksichtigt werden muss: Bei zu vielen Vorlagen kann sich die Kompilierungszeit erheblich verlängern und das Parsen von Fehlermeldungen erschweren.
Siehe auch
Inwieweit ist generische und Metaprogrammierung mit C ++ - Vorlagen in der Computerwissenschaft nützlich?