Betrachten Sie ein einfaches Makro:
%Vor%Dies erzeugt die exakte Ausgabe, die wir erwarten:
%Vor%Das obige Beispiel funktioniert, weil die Klammern neben dem Funktionsaufruf vom Präprozessor erkannt werden.
Überlegen Sie sich, was passiert, wenn ich anstelle eines Funktionsaufrufs eine Vorlage verwende:
%Vor% Dies verursacht einen Fehler, weil der Präprozessor die template<int
und die bool>
als zwei separate Argumente für das Makro interpretiert. Der Präprozessor erkennt <>
für den Bereich nicht!
Gibt es trotzdem eine Vorlage wie diese in einem Makro?
Wenn Sie die Verwendung von Cog in Ihrem Projekt zulassen, wird Ihr Code besser lesbar:
%Vor%Nachdem Sie über diese Datei gecogged haben, erhalten Sie:
%Vor%Sie können Ihre Definitionen sogar in separate .py-Dateien verschieben, und die Cog-Sektion sieht folgendermaßen aus:
declarations.py
%Vor%mein.h
%Vor%Der Hauptvorteil der Verwendung von Cog besteht darin, dass Sie die vollständige Kontrolle über Ihre Code-Generierung erhalten, vermeiden Sie unlesbare Fehler mit Boost-Präprozessoren oder ähnliches.
Der Hauptnachteil besteht darin, dass Sie Ihrem Projekt eine neue Werkzeugabhängigkeit hinzufügen. Da Sie die Verwendung in Kommentaren mit den Cog-Abschnittsmarkierungen umbrechen müssen, ist es möglicherweise schlimmer, als den Code manuell für kleine Verwendungen zu schreiben. Es lohnt sich wirklich, wenn Sie große enums oder eine Menge unvermeidlichen Boilerplate-Code deklarieren müssen