Frage

Gibt es irgendwelche Fragen, das T4 Template Code-Erzeugungssystem nicht geeignet zur Erzeugung von C ++ Code des MS machen könnte?

War es hilfreich?

Lösung

Es kann generieren Sie einen beliebigen Text, einschließlich C ++ Code möchten.

Andere Tipps

Ein bisschen lange Antwort noch denke ich, einige finden könnte es interessant

Ich würde sagen, T4 ausgezeichnet C ++ mit

zu erzeugen,

Einige könnten, dass C ++ Retorten bereits Tools metaprogramming mit Gleichem zu tun hat:

Die Preprocessor

Unter Verwendung der Prä-Prozessor und höherer Ordnung Makros Sie können etwas erreichen, was Sie mit T4 tun können, aber ich sage, es gibt einige ziemlich überzeugende Vorteile von T4:

  1. Der generierte Code von T4 ist einfach zu debuggen und verstehen,
  2. metaprogramming mit T4 ist einfacher als mit dem Prä-Prozessor. Der Präprozessor können Makros tun wie max / min leicht genug, aber wenn wir über modellgetriebene Vorlagen sprechen wird es schwierig
  3. T4 ist mächtiger als der Präprozessor es einfacher zu entwickeln, um die Vorlagen zu machen
  4. T4 kann als Teil des Build-Prozesses oder On-Demand
  5. ausgeführt werden

Partielle Template-Spezialisierung

ich lieben Teil Template-Spezialisierung Tricks, aber ich spreche aus Erfahrung, dass nicht jeder sie liebt es zu halten.

ich immer danach gestrebt Code Redundanzen in dem Bemühen, zu reduzieren Wartbarkeit zu erhöhen. Außerdem ziehe ich Fehler über Fehler Laufzeitzeit kompilieren, wenn möglich. So nach dem Lesen Moderne C ++ von Andrei Alexandrescu Ich dachte, ich die Antwort gefunden .

Ich schrieb eine Komponente von diesem Buch inspiriert, die großen gearbeitet, dann ging ich im Urlaub. Als ich zurückkam, hatte das Team die Komponente hinausgeworfen und umschrieb ihre eigenen traditionellen Techniken. Es enthielt mehr Code, instabiler war und nicht so gute Leistung aber sie konnten nicht verstehen, wie die Funktionalität der Komponente hinzuzufügen, die ich geschrieben hatte, und stellten sie fest, hatte dies zu tun. Nichts konnte geborgen werden. Diese waren smarten Jungs auch.

Möchten Sie falsch, dies zu tun? In Bezug auf die Wartbarkeit würde ich sagen, dass sie die richtige Wahl getroffen haben, auch wenn es mich traurig macht.

Mein Punkt mit diesem anechdote ist, dass T4 einige Vorteile über partielle Template-Spezialisierung Tricks hat:

  1. Der generierte Code von T4 ist einfach zu debuggen und verstehen,
  2. T4 ist einfacher
  3. T4 ist mächtiger
  4. T4 ausgeführt Teil des Build-Prozesses werden kann oder On-Demand
  5. Wenn die Maintainer ihren Kopf um die T4-Vorlage erhalten können sie den Code noch retten kann (starten Sie den generierten Code zu erhalten und die Vorlage wegwerfen). Das war nicht möglich, in der anechdote oben.

Natürlich in C ++ metaprogramming ist eine Kombination aus den PreProcessor und partieller Template-Spezialisierung.

Nachteile

Es gibt Nachteile mit T4 natürlich;

  1. Es ist Visual Studio spezifisch (oder Mono-spezifisch). Doch der generierte Code kann natürlich gemacht werden, dass sie übersetzbar von GCC und anderen.
  2. Es ist nicht-Standard
  3. Visual Studio C ++ Projekte scheinen nicht T4 zu unterstützen, die mich zwingt, ein Dummy-.NET-Projekt verwenden Sie den Code frmo zu erzeugen.

Wrapping up

Alles in allem habe ich das Interesse verloren zu tun erweiterte metaprogramming C ++ mit ausgefallenen Tricks mit dem PreProcessor oder das Typsystem (ich sie allerdings für einfachere Aufgaben zu tun verwenden) und stützt sich auf T4 für dass in diesen Tagen.

Wenn jemand interessiert ist in einer Probe, wie es in C ++ tun könnten Sie überprüfen InteractiveGraphics . Es ist eine Bibliothek für C #, VB, Powershell und Smallbasic in einfache Grafiken zu tun. Da ich T4 verwenden, um alle APIs und Standardcode für die Nachrichten zwischen .NET und C ++ (Ich benutze keinen C ++ / CLI vorbei zu erzeugen, wenn ich es vermeiden kann alle) von einem Modell der Beschreibung der API. eine neue Methode Hinzufügen so einfach wird dann als das Modell erstreckt und alle temlate Dateien Regenerieren ich eine abstrakte Methode in C ++ dann implementieren und den Spaß Dinge tun.

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