Frage

in C ++ Template Metaprogrammierung: Konzepte, Werkzeuge und Techniken von Boost und jenseits

  

... Ein Nachteil Ausdruck Vorlagen ist, dass sie große, komplizierte Ausdrücke zu fördern neigen dazu, zu schreiben, weil Auswertung nur, bis der Zuweisungsoperator verzögert aufgerufen wird.

: Wenn ein Programmierer einige Zwischenergebnis wieder zu verwenden will, ohne es zu früh zu bewerten, kann sie eine komplizierte Art wie zu erklären gezwungen werden
Expression<
           Expression<Array,plus,Array>,
           plus,
           Expression<Array,minus,Array>
          > intermediate = a + b + (c - d);
  

(oder schlechter). Beachten Sie, wie diese Art nicht nur genau und redundant die Struktur des computationand reflektiert würde, so muß wie die Formel Änderungen beibehalten werden, aber auch überwältigt es? Dies ist ein seit langem bestehendes Problem für C ++ DSELs. Die übliche Abhilfe ist, unter Verwendung des Ausdrucks Typ Löschung zu erfassen, aber in diesem Fall zahlt man für die dynamische Disposition. Es hat vor kurzem viel diskutiert worden, angeführt von Bjarne Stroustrup selbst, über das rudimentäre Schlüsselwort auto Wiederverwendung Typen Abzug in Variablendeklarationen zu bekommen, so dass die oben neu geschrieben werden könnte, wie:

auto intermediate = a + b + (c - d);
  

Diese Funktion einen großen Vorteil zu C ++ DSEL Autoren und Anwender würde ...

Ist es möglich, dieses Problem mit dem aktuellen c ++ std zu lösen. (Nicht C ++ 0X)

Für das Beispiel möchte ich einen Ausdruck schreiben wie:

Expr X, Y

Matrix A, B, C, D

X = A + B + C

Y = X + C

D: = X + Y

Wo Betreiber:. = Bewertet den Ausdruck spätestens Zeit

War es hilfreich?

Lösung

Für jetzt können Sie immer a href = verwenden < "http://www.boost.org/doc/libs/1_40_0/doc/html/typeof/refe.html#typeof.auto" rel = "nofollow noreferrer „> BOOST_AUTO () an der Stelle von C ++ 0x dem Schlüsselwort auto, um mehr Zwischenergebnisse leicht.

Matrix x, y;
BOOST_AUTO(result, (x + y) * (x + y)); // or whatever.

Andere Tipps

Ich verstehe Ihre Frage nicht. auto wird in C++0x für automatische Typinferenz .

Ich persönlich sehe dies als Nachteil für die Expression Vorlagen, da sie eine geringere Lebensdauer auf, die als die Gegenstände, auf denen sie gebaut werden Relais oft falsch erweisen, wenn der Ausdruck Vorlage erfasst wird, wie ich here .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top