Delegate Klasse und Pointer to Memberfunction



  • Hi, bin gerade dabei eine Delegate Klasse nach dem Vorbild von C#/.NET zu schreiben. D.H. im Moment sieht das ganze so aus, dass ich statische Methoden einem void* Pointer übergebe und über diesen auch wieder abrufe. Jetzt wollte ich das ganze auch mit nicht statischen Memberfunktionen machen können und muss feststellen, dass man auf diese ja gar nicht mit einem void* Pointer zeigen kann. Was also tun? Würde es evtl. helfen, wenn ich der Delegate-Klasse das Target/Sender Objekt zu dem die Memberfunction gehört übergebe?



  • Hallo Student83,

    Ich glaube du suchst sowas hier: http://www.c-plusplus.net/forum/298123

    Gruß,
    XSpille



  • Ich verstehe die Frage zwar nicht, aber hier könnte das Äquivalent zu event gemeint sein. Das wäre dann wohl das viel mächtigere boost::signal . Wenn du so etwas nachbauen willst, orientiere dich wenigstens daran.
    In dem Zusammenhang benötigt man auch so etwas wie std::bind , um Methoden zu binden (gibts auch in Boost für ältere Compiler).



  • Andere Libraries wie z.B. Boost kommen nicht in Erwägung. Richtig, das soll im Prinzip ein Event Nachbau werden.

    Das scheint also ohne Templates wohl nicht zu gehen was mir dann auch zu unflexibel ist, da man die Parameter der Funktion dem Pointer-To-Memberfunction ja bekannt machen muss. Unterschiedliche Handler mit unterschiedlichen Parametern wären also nicht mehr möglich. Werde dann wohl nur statische Handlerfunktionen implementieren die eine entsprechende virtuelle Memberfunktion aufrufen. Das scheint sowieso der bessere Weg, da (wenn ich das richtig verstanden habe) sonst bei nicht statischen virtuellen Memberfunktionen die als Handlerfunktion registriert würden in einer abgeleiteten Klasse nur diese registrierten virtuellen Funktionen der Basisklasse aufgerufen würden, nicht aber die überschriebenen virtuellen Funktionen, die die abgeleitete Klasse implementiert.



  • Ich verstehe das Problem nich nicht ganz, was Du zu lösen versuchst. Wo würdest Du denn deine Delegate-Klasse einsetzen wollen?


Anmelden zum Antworten