Standard Makro das Klassennamen zurückgibt
-
Ok, dann hab ich mich wohl getäuscht. Werde wohl mit __FILE__ arbeiten (geht um einen Logger). RTTI möchte ich nicht extra für den Logger mitkompilieren müssen.
Danke...
PS @ Scorcher: das würde ich auch gerade noch schaffen

-
Einige Compiler unterstützen auch das Makro "__FUNC__", das dann auch bei Klassenmembern (bzw. Konstruktor/Destruktor) funktioniert.
-
Ich arbeite hier mit gcc-Version 3.4.6 und der kennt das Makro __FUNC__ leider nicht. Wäre auch zu schön gewesen

Trotzdem danke, werde das mal daheim mit dem msvc Compiler probieren ob der das kann...
-
Tobias W schrieb:
Ich arbeite hier mit gcc-Version 3.4.6 und der kennt das Makro __FUNC__ leider nicht. Wäre auch zu schön gewesen

Trotzdem danke, werde das mal daheim mit dem msvc Compiler probieren ob der das kann...verwend halt __FUNCTION__ bzw __PRETTY_FUNCTION__ was dir fürs logging sicher besesr gefällt
-
Blöde Frage: Was is an der Lösung von mir auszusetzen? Sie tut genau das was du möchtest..
rya.
-
Warum statt
cout << ClassName(foo)nicht gleich
cout << "foo"
Dann brauchst du gar keine Makros.
-
Naja, dein define macht ja nix anderes als ein Namen der übergeben wird per cout auszugeben. Aber ich schreibe einen richtigen logger, der einmal eingebunden wird und mit einem Makroaufruf (z.B. LOG_ERROR << "hallo" << LOG_ENDL;) so eine Ausgabe erzeugen soll:
ERROR (2007-05-21 09:11:13, myClass on Line 311): hallo
Im Quelltext soll so wenig Schreibaufwand wie möglich sein. Deswegen will ich den Klassennamen rausfinden und nicht wie in deinem Fall ihn übergeben. Aus diesem Grund werde ich wohl mit __FILE__ arbeiten (auch wenn mir __PRETTY_FUNCTION__ sehr gut gefällt), da myClass.cpp den Klassennamen beinhaltet.
Edit:
Tja, zu langsam...
-
Man muss den Klassennamen explizit eintragen?
MfG Kimmi
-
Tobias W schrieb:
Naja, dein define macht ja nix anderes als ein Namen der übergeben wird per cout auszugeben. Aber ich schreibe einen richtigen logger, der einmal eingebunden wird und mit einem Makroaufruf (z.B. LOG_ERROR << "hallo" << LOG_ENDL;) so eine Ausgabe erzeugen soll:
ERROR (2007-05-21 09:11:13, myClass on Line 311): hallo
Im Quelltext soll so wenig Schreibaufwand wie möglich sein. Deswegen will ich den Klassennamen rausfinden und nicht wie in deinem Fall ihn übergeben. Aus diesem Grund werde ich wohl mit __FILE__ arbeiten (auch wenn mir __PRETTY_FUNCTION__ sehr gut gefällt), da myClass.cpp den Klassennamen beinhaltet.
Edit:
Tja, zu langsam...Ok, ist nachvollziehbar
War leider aus deiner Frage nicht ersichtlich, dass du dieses "#" schon kennst.^^
rya.
-
Das __FUNCTION__ Makro gibt es eigentlich auf fast jedem Compiler. Es heißt nur manchmal anders (__FUNC__ bei Borland). Im kommenden Standard soll es dann wohl als __func__ drin sein.
Ich denke schon das man das so verwenden kann. Bei Bedarf kann man es ja mit diversen #ifdefs umdefinieren.
http://lists.ibiblio.org/pipermail/freetds/2003q4/014164.html
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=338&rl=1