2010-03-26 12 views
10

Was sind gute Einführungen in die Erstellung von C++ - Ausdrucksvorlagen? Ich möchte arithmetische Ausdrücke für benutzerdefinierte Typen ausdrücken und gleichzeitig temporäre Werte (die groß sein können) vermeiden und lernen, dies direkt zu tun, anstatt eine vorhandene Bibliothek anzuwenden.Lernprogramme und Einführungen in C++ - Ausdrucksvorlagen

Ich habe Todd Veldhuizen's original paper und ein Beispiel aus den Josuttis C++ Templates book, und ein Artikel von Kreft & Langer gefunden. Es wird in Vorlesung 6 eines Kurses über Modern C++ erwähnt, der auf Josuttis zurückgeht. Die POOMA-Bibliothek background führt Expressionsvorlagen schön ein.

Ich suche nach einfach, klare Expositionen.

+2

Boost-Lambda-Bibliothek scheint diese Technik zu verwenden. Aus meiner Erfahrung ist es sehr umständlich zu verwenden und hat immer noch viele Einschränkungen; Ich wäre nicht überrascht, wenn es keine einfachen Erklärungen dafür gäbe, wie das funktioniert. – liori

+0

boost :: lambda hat einen anderen Zweck als Expressionsvorlagen. –

Antwort

5

Sie sollten eine Kopie von C++ Templates: The Complete Guide erhalten.

Das Codebeispiel, auf das Sie verlinken, hat keinen begleitenden Text, was sehr hilfreich ist (das Kapitel über Ausdruckvorlagen ist 22 Seiten lang). Ohne den Text ist alles, was Sie haben, Code ohne irgendwelche Kommentare oder Erklärungen, was es tut und wie und warum es es tut.

+1

Vandevoorde und Josuttis haben die einzige wirklich vollständige Beschreibung. Das Thema wird niemals * einfach * sein, denn es ist ein kompliziertes und schwieriges Thema, aber es macht den besten Job. – jwismar

0

Sie haben alle Quellen bekamen mit Ausnahme des wissenschaftlichen C++ Buch, das wirklich nur das ursprüngliche Papier (WRT zu diesem Thema sowieso) und ziemlich veraltet ist. Sie könnten sich C++ Template Metaprogramming für modernere Techniken ansehen, die aus den Expression-Templates-Ideen stammen, aber etwas "einfaches" wird nicht ohne weiteres verfügbar sein, bis es einfach ist.

0

Ich schlage vor, die Boost-Operatoren bei Boost Operators - Arithmetic zu überprüfen. Dies sind Templates, die grundlegende Rechen- und Vergleichsoperationen erweitern.

6

ich Expression Templates Demystified ziemlich gut erklärt erwiesen. Es beginnt damit, zu zeigen, wie man mathematische Ausdrücke ohne Vorlagen implementiert und zeigt die grundlegenden Bausteine ​​und Konzepte.

Der zweite Teil des Artikels zeigt, wie die ursprüngliche Implementierung so umgestaltet werden kann, dass stattdessen Vorlagen für eine verbesserte Leistung und weniger Code verwendet werden.

IMO ist der Artikel eine gute Alternative zum Ausdruck Vorlage Kapitel in 'C++ Templates: The Complete Guide'.

0

für das, was Sie tun möchten, sollten Sie den Code von Boost.ublas betrachten, wie es genau das tut.

Beginnen Sie mit der Datei vector.hpp und gehen Sie dann zurück in die Hierarchie (Eltern von vector<>). Matrizen sind ein bisschen komplexer, aber der Mechanismus ist der gleiche.

Jetzt rate ich, nicht zu versuchen, die Komplexität der Bibliothek als erster Versuch, wie ublas_expression und solche Dinge zu reproduzieren. Sie können es einfacher machen, indem Sie Ihren Typ zum Basisobjekt machen und dann einen binären Operator implementieren.

Schauen Sie auch hier: http://www.bnikolic.co.uk/blog/cpp-expression-minimal.html