Makro, um den Typ eines Ausdrucks zu erhalten

9

Frage

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

sein

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?

Motivation

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:

%Vor%

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.

    
Corvus Corax 03.09.2012, 13:20
quelle

1 Antwort

2

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%     
ecatmur 03.09.2012, 14:21
quelle