Ich habe einen Fall, in dem ich ein Makro verwende, um einfache Unterklassen zu generieren. Derzeit ist es wie folgt definiert:
#define REGISTER( TYPE, NAME ) \
struct NAME ## Class : public ParentClass \
{ \
NAME ## Class () : ParentClass ( # NAME ); \
}
Ich möchte wirklich, dass der Name einen Punkt enthält, aber dann wird das Makro erweitert und funktioniert nicht:
struct Simple.ClassClass : public ParentClass
{
Simple.ClassClass () : ParentClass ("Simple.Class");
};
Gibt es eine Möglichkeit, mit einer Präprozessor-Definition den Punkt im Namen loszuwerden? Dann könnte ich den Punkt im String behalten (wie gewünscht) und den Klassennamen einen anderen (zulässigen) Zeichen verwenden lassen.
Der Klassenname spielt keine Rolle (solange er eindeutig ist). Das einzige, was zählt, ist der lesbare String.
Ich habe Zugriff auf Boost.Preprocessor, aber ich konnte nicht verstehen, ob etwas davon nützlich wäre.
Danke.
BEARBEITEN: Der Grund dafür ist, dass ich die Industrial Strength Pluggable Factories als Vorlage und Makro für eine einfache Generierung der Herstellerklasse implementiere. Es könnte jedoch viele Hersteller-IDs geben, sodass ich die Möglichkeit haben möchte, sie durch einen Punkt "zu gruppieren". Derzeit mache ich es bereits mit Unterstrichen, ich war nur neugierig, ob ich es mit einem Punkt anstelle eines Unterstrichs zum Laufen bringen könnte, da ich es optisch ansprechender finde. Der einzige wichtige Teil ist, dass da ein anderer Mensch außer mir, der Code schreibt, den vom Makro generierten Code nicht sieht, das Makro also nichts Hinterlistiges im Hintergrund tun kann. Was auch immer als Name eingefügt wird, muss der Schlüssel sein, der zur Abfrage des Elements verwendet wird.
Ich habe das Problem heute Morgen wieder angesehen und glaube, ich kann Makros einfach ganz vermeiden. Trotzdem vielen Dank.