[Makros] Definitionsprobleme beim Benutzen von Methoden



  • Erstmal, Guten Tag.
    Ich wollte ein Makro erstellen, dass eine Methode darstellt, an die ein mehr oder weniger fester Parameter übergeben werden soll. Dieser Parameter widerum, ist auch eine Methode (oder eher deren Rückgabewert) und da scheint auch das Problem zu sein. Hier einmal das Makro:

    #define SetPlayerLevelUp()            SetPlayerLevel(GetPlayerLevel()+1)
    

    wenn ich das Makro jetzt z.B. so aufrufe

    player.SetPlayerLevelUp ();
    

    weiß der Compiler zwar, dass SetPlayerLevel (...) eine Methode von der Klasse PLAYER ist, allerdings eben nicht, dass auch GetPlayerLevel () eben eine solche ist. Da ist dann auch das Problem. Ich habe zwar selbst die unrealistischten Lösungsansätze versucht, aber es hilft nichts. Also z.B.

    #define SetPlayerLevelUp()            SetPlayerLevel(PLAYER::GetPlayerLevel()+1)
    
    //oder
    
    #define SetPlayerLevelUp()            SetPlayerLevel(PLAYER->GetPlayerLevel()+1)
    
    //oder
    
    #define SetPlayerLevelUp()            SetPlayerLevel(PLAYER.GetPlayerLevel()+1)
    
    //oder
    
    #define SetPlayerLevelUp(x)            x.SetPlayerLevel(x.GetPlayerLevel()+1)
    

    die letzte Möglichkeit funktioniert zwar, allerdings wollte ich sowas umgehen (Übergabe von Parametern etc.)
    Jetzt meine Frage. Kann ich das überhaupt mit Makros lösen, wenn ja wie, oder muss ich dann dazu doch noch eine Methode schreiben (wer auch nicht der Weltuntergang aber eher 3. Wahl)...

    Danke im voraus, Fake oder Echt



  • Solange es nicht irgend ein Makro gibt das genau das tut das ich nicht kenne: Nein.

    Ist ja stumpfes Suchen/Ersetzen in dem Fall und daher wirst du da auch nichts machen können (außer eben mit Parametern zu arbeiten).



  • Ja hatt ich auch schon befürchtet 😃
    Einen Versuch hatte ich noch vergessen, der aber absolut daneben ging:

    #define x.SetPlayerLevelUp()            x.SetPlayerLevel(x.GetPlayerLevel()+1)
    

    Naja die Not macht eben erfinderisch...



  • Komplett auf Makros zu verzichten wäre hier wohl der bessere Weg.


Anmelden zum Antworten