"this" als Parameter-Default



  • Hallo Leute!

    Ich habe hier ein kleines Problem und vielleicht könnt ihr mir einen guten Tipp geben. Folgendes:

    Meine Klasse CConfig hat eine Funktion "QueryKey". In meinem Projekt wird zig-mal aus verschiedenen Klassen diese Funktion aufgerufen (Über eine globale Instanz der Klasse CConfig). Irgendwie muss ich jetzt feststellen, das das Objekt, das gerade die QueryKey-Funktion aufruft einer bestimmten Klasse angehört. Um diese Klasse zu identifizieren benutze ich das DECLARE/IMPLEMENT_DYNAMIC Makro das mir erlaubt den Klassennamen zur Laufzeit per GetRuntimeClass abzufragen. Soweit ok. Das CConfig Objekt muss aber natürlich auch irgendwie einen (CObjekt) Pointer von dem Objekt bekommen das die Funktion aufruft damit die Prüfung überhaupt stattfinden kann. Jede einzelne Funktion anzupassen ist nicht möglich - Weil es wirklich eine Menge Aufrufe und viiiieeel Souce ist der geändert werden müsste. Also war mein Ansatz, der QueryKey Funktion einen Parameter zu verpassen - Typ CObjekt* mit Default "this". Also jedes Objekt das die Funktion aufruft soll automatisch seinen "this" an die Funktion übergeben.
    Leider steht das irgendwie im Konflikt mit dem Konzept von C++ 😃
    Der Klassen-Assi sagt mir nämlich, "this" sei nur in nicht-statischen Member-Funktionen verfügbar ist. Das geht also (anscheinend) nicht. Wie kriege ich also innerhalb der CConfig raus, welches Objekt (Benötigt wird ein CObject-Pointer) die Funkion aufgerufen hat ? Vorschläge, Ideen ?



  • Weil es wirklich eine Menge Aufrufe und viiiieeel Souce ist der geändert werden müsste.

    Falls du keine andere Lösung findest:
    1. Suchen in Dateien nach dem Funktionsnamen
    2. Makro aufzeichnen, wo das this eingebaut wird + F4 drücken am Ende
    3. Makro so oft ausführen wie nötig
    4. Kompilieren und hoffen. 😉



  • Das Problem ist, daß der Default-Parameter schon zur Laufzeit bekannt sein muß (und selbst wenn du dort this angeben könntest, würde der höchstwahrscheinlich auf dein CConfig verweisen).

    Außerdem: Wenn deine Funktion irgendwas mit dem Aufrufer machen soll, führt kein Weg daran vorbei, ihr dessen Adesse mitzuteilen.


Anmelden zum Antworten