define macro -> const string ?



  • Hallo

    ich habe folgendes Problem. Ich habe ein Macro das ich in jede Klasse von mir einbinde und einige standardfunktionen Klassenabhängig implementiert

    Nun würde ich gerne folgendes machen

    #define ClassName( CLASS )    const wchar_t* getInstanceName() \
                                        { return L"CLASS"; }
    

    allerdings funktioniert das nicht so wie gedacht. Ich bekomme immer, wie ich beim schreiben schon befürchtet habe 😉 immer CLASS geliefert. Ich möchte allerdings die "Variablennamen" bekommen.

    also wenn ich in einer Klasse schreibe

    ClassName(MeineKlasse);
    

    soll diese später auch "MeineKlasse" liefern.

    Danke schon vorab.

    PS. Ich weiß das man dies auch über RTTI lösen kann, allerdings möchte ich dies hier vermeiden.



  • templates?



  • was bringen mir hier templates ? Ich will keine Vorlage für ähnliche Probleme. Ich will die KlassenNamen meiner Klassen unabhängig von der funktion.

    Aber wenn du meinst das geht mit einer Templatefunktion immerzu bin offen für sourcecoude 😃



  • Schreib einfach in den Macroaufruf(heißt das so?) den Klassennamen in Anführungszeichen und ersetz im Macro das L"CLASS" durch CLASS



  • #define ClassNameWide( CLASS ) L##CLASS
    #define ClassName( CLASS )    const wchar_t* getInstanceName() \
                                        { return ClassNameWide(#CLASS); }
    

    Wenn mich nicht alles täuscht. 🙂



  • Hallo,
    #CLASS liefert dir einen String. Wenn du wirklich einen Wide-String brauchst musst du noch eine Indirektion einbauen:

    #define WIDEN(x) L##x
    #define ClassName( CLASS )    const wchar_t* getInstanceName() \
                                        { return WIDEN(#CLASS); }
    


  • Ich werd' zu alt und zu langsam 😞



  • ha super es geht 😃

    danke an Alle, auch die alten und langsamen 🤡

    geht offensichtlich auch :

    #define ClassName( CLASS )    const wchar_t* getInstanceName() \
                                        { return L###CLASS; }
    

Anmelden zum Antworten