zur laufzeit methodennamen bestimmen
-
gibt es in c++ eine möglichkeit zur laufzeit den eigenen methodennamen zu bestimmen (so in der art von java reflections). etwa so (wobei ??? den methodennamen liefern sollte):
void CMyClass::doSomething (int a) { if (0==a) { LOGGER.log("problem in method '" + ??? + "' a is zero"); } }
thx
lordy
-
Nein, gibt es nicht - zur Laufzeit hat die Funktion keinen Namen mehr, sondern lediglich eine Adresse. Aber was hindert dich daran, den Methodennamen direkt dort einzutragen (beim Schreiben der Method weißt du, wie sie heißt)?
-
sowas wäre aber gar nich so übel.. wenn es funktionierne würdE:)
-
BorisDieKlinge schrieb:
sowas wäre aber gar nich so übel.. wenn es funktionierne würdE:)
msvc z.b. hat dafür ein vordefiniertes makro: __FUNCTION__
-
Müsst bei gcc auch funktionieren. Alternativ: __PRETTY_FUNCTION__.
-
Die arbeiten aber vermutlich nicht (wie vom OP gewünscht), zur Laufzeit, oder ?
Gruß,
Simon2.
-
Nö, aber so wie er es verwenden will sollte es ausreichen oder?
-
David_pb schrieb:
Nö, aber so wie er es verwenden will sollte es ausreichen oder?
Weiß ich nicht - ich habe so etwsa nicht gebraucht. Er hat halt nur nach "Laufzeit" gefragt und ich wollte nur auf den Unterschied hinweisen.
Gruß,
Simon2.
-
Für Debugging Zwecke ist sowas sehr praktisch so kann man seine Log-Einträge direkt mit dem zugehörigen Funktionsnamen versehen.
-
wirklich zur laufzeit wäre natürlich noch besser, aber für die debugging zwecke is __PRETTY_FUNCION__ auch ausreichend. erspart eine menge copy paste arbeit und vor allem die fehler anfälligkeit der log statements wird auch reduziert wenn ich es nicht immer selber runterkopieren muss - thx
-
ein funktionsname aendert sich nach dem compilieren nicht, wozu sollte man also zur laufzeit sowas evaluieren? es wuerde keinen unterschied zu __function__ liefern.
-
Die C++ Funktionen (in Klasse bsw.) klingt dann aber immer so komisch.
-
rapso schrieb:
ein funktionsname aendert sich nach dem compilieren nicht, wozu sollte man also zur laufzeit sowas evaluieren? es wuerde keinen unterschied zu __function__ liefern.
Ja - was weiß denn ich ?
Gefragt war "zur Laufzeit", geantwortet wurde "Per Makro", Hinweis von mir "ist allerdings nicht zur Laufzeit", Hinweis vom OP "reicht mir" - fertig.Gruß,
Simon2.
-
Mit einem Makro kannst du das ganze übrigens abkürzen:
#define LOG(text) LOGGER.log("In function " __FUNCTION__ ":" text);
ggf. musst du die genaue Zusammensetzung des endgültigen Strings etwas anpassen, je nachdem ob du nur konstante Strings benutzt oder auch noch Werte mit einbaust.
-
Am einfachsten wäre, man würde eine ausgereifte LOG-Library benutzen.