Das Problem:
Ich habe rund 600 Klassen, die alle einen statischen Member haben, der den Namen der Klasse enthält:
Code: Alles auswählen
class OberKlasse
{
static char const * MeinKlassenname;
char const * NameDerKlasseDieserInstanz;
};
class TolleKlasse : public Oberklasse
{
static char const * MeinKlassenname;
};
Dafür müsste ich einen Stringvergleich machen, das dauert mir zu lange. Nun hat jede Klasse ihren Namen ja statisch vorliegen und übermittelt diesen in den Konstruktor von 'Oberklasse'. Es würde also vollkommen reichen, mit dem Pointer der statischen Instanz zu vergleichen. Das Blöde dabei ist, dass ich eine Liste bekomme, in der die Strings ausgewählter Klassen stecken. Ich muss also sicherstellen, dass derjenige, der die Liste füttert, auch die statischen Klassennamen verwendet (also TolleKlasse::MeinKlassenname) und nicht einfach "TolleKlasse" schreibt.
Ich möchte also eine Klasse "Klassenname" einführen und dort den Konstruktor für (char const *) öffentlich verbieten. Nun habe ich nur das Problem, dass ich für meine Klasse "Klassenname" rund 600 'friend class ...;' angeben müsste, damit diese auf den Konstruktor zugreifen können, um ihren jeweiligen statischen Klassennamen zu erzeugen.
Die Frage ist nun, wie man "Klassenname" öffentlich zugänglich macht, so dass es nur diese 600 statischen Instanzen gibt, aber auf keinen Fall andere, ohne mir einen Wolf an friend-classes zu schreiben?