Ich versuche, ein C ++ - Makro zu schreiben, das entweder type
oder type name
als Eingabe verwendet und type
als Ausgabe.
Zum Beispiel:
REMOVE_NAME(int)
sollte int
sein
REMOVE_NAME(int aNumber)
sollte auch int
Ich habe es geschafft, ein solches Makro zu schreiben (unten) und es funktioniert, aber ich frage mich, ob mir ein einfacherer Weg fehlt, dies zu erreichen.
%Vor%Irgendwelche Ideen?
Ich benutze dieses Makro, um bei der Codegenerierung zu helfen. Ich habe ein anderes Makro, das verwendet wird, um bestimmte Methoden in Klassendefinitionen zu deklarieren:
%Vor% Ich möchte, dass der Benutzer des Makros SLOT
bequem auswählen kann, ob er seine Slots innerhalb oder außerhalb der Klasse implementieren möchte, genau wie bei normalen Methoden. Das bedeutet, dass das Argument SLOT
entweder ein Typ oder ein Typ mit einem Namen sein kann. Zum Beispiel:
Ohne das REMOVE_NAME
-Makro kann meine automatisch generierte Slot...
-Methode keinen eigenen Namen für ihr Argument angeben und kann daher nicht darauf verweisen.
Natürlich ist dies nicht die einzige mögliche Verwendung für dieses Makro.
Ich denke, du hast recht; Soweit ich das sagen kann, ist die einzige andere Produktion, bei der ein decl-specifier-seq oder type-specifier-seq von einem optionalen declarator gefolgt wird ist eine catch
-Anweisung, und ich denke nicht, dass das für die Typextraktion viel nutzt. Die -Parameterdeklaration wird auch in template-parameter-list verwendet, aber das ist auch nicht viel nützen.
Ich könnte Ihr Makro so definieren und die Abhängigkeit von Boost entfernen:
%Vor%Tags und Links macros c++ templates types typetraits