Verwenden von Kommas innerhalb eines Makros ohne Klammern: Wie kann ich eine Vorlage mischen und zuordnen?

8

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?

    
chrisaycock 23.02.2012, 16:02
quelle

3 Antworten

11
%Vor%

Ein bisschen schmerzhaft, aber es funktioniert.

FWIW, wenn die Syntax für das Argument () s zulässt, brauchen Sie die Ersetzung nicht, z. B.

%Vor%

funktioniert für ein einzelnes Argument-Makro, aber das funktioniert nicht immer (einschließlich Ihres).

    
smparkes 23.02.2012, 16:05
quelle
5

Ein variadisches Makro kann helfen:

%Vor%     
Yan 21.08.2013 09:53
quelle
1

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

    
lurscher 26.02.2012 17:07
quelle

Tags und Links