Heim >Backend-Entwicklung >C++ >Wie ermittle ich den Klassennamen in C ohne das Makro __CLASS__?
Das Fehlen eines direkten Äquivalents zum Python-Makro __CLASS__ in C zwingt Entwickler dazu, nach alternativen Lösungen zu suchen, um den aktuellen Klassennamen während der Laufzeit abzurufen.
Um diesem Bedarf gerecht zu werden, haben Entwickler Makros entwickelt, die verschiedene Techniken nutzen, um den Klassennamen aus den vom Makro __PRETTY_FUNCTION__ bereitgestellten Informationen zu extrahieren. Wenn dieses Makro innerhalb einer Klassenmethode verwendet wird, gibt es eine Zeichenfolge zurück, die die vollständig qualifizierte Methodensignatur darstellt, einschließlich des Klassennamens, des Methodennamens und der Parameter.
Ein solches Makro, bekannt als __METHOD_NAME__, verwendet die Hilfsfunktion methodName um die Zeichenfolge __PRETTY_FUNCTION__ zu analysieren. Es entfernt den Rückgabetyp, die Modifikatoren und die Argumente, sodass nur der Klassenname und der Methodenname übrig bleiben.
Zum Beispiel:
inline std::string methodName(const std::string& prettyFunction) { size_t colons = prettyFunction.find("::"); size_t begin = prettyFunction.substr(0,colons).rfind(" ") + 1; size_t end = prettyFunction.rfind("(") - begin; return prettyFunction.substr(begin,end) + "()"; } #define __METHOD_NAME__ methodName(__PRETTY_FUNCTION__)
Mit diesem Makro können Entwickler den Klassennamen einfach in nicht abrufen -statische Methoden. Bei Verwendung in statischen Methoden, bei denen dieser Zeiger nicht verfügbar ist, müssen Entwickler jedoch alternative Makros in Betracht ziehen, die das Makro __PRETTY_FUNCTION__ verwenden.
Für Szenarien, in denen nur der Klassenname erforderlich ist, kann das Makro __CLASS_NAME__ verwendet werden:
inline std::string className(const std::string& prettyFunction) { size_t colons = prettyFunction.find("::"); if (colons == std::string::npos) return "::"; size_t begin = prettyFunction.substr(0,colons).rfind(" ") + 1; size_t end = colons - begin; return prettyFunction.substr(begin,end); } #define __CLASS_NAME__ className(__PRETTY_FUNCTION__)
Dieses Makro eignet sich sowohl für Klassen- als auch für statische Methoden und analysiert die Zeichenfolge __PRETTY_FUNCTION__, um den Klassennamen effektiv zu extrahieren.
Das obige ist der detaillierte Inhalt vonWie ermittle ich den Klassennamen in C ohne das Makro __CLASS__?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!