• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Static member Funktion mit this aufrufen ... oder anders rum

Binary

Gast
Also ich hänge da in einer Denkschleife fest.

Ich möchte eine Carbon C++ AGL Fensterklasse schreiben und den Timer gleich
mit einbauen, und eines schöne Tages als Interface implementieren (ähnlich glut).

Mein Problem ist nun, dass ich an NewEventLoopTimerUPP ein Funktion übergeben
muss in der steht was denn nun beim Ideln passieren soll.
Dise Funktion muss nach meinem Erkentnisstand static sein, damit sie garantiert zum
Start des Programms verfügbar ist.

Aber da in dieser Funktiun die Drawmethode aus der Klasse aufgerufen werden soll
stehe ich jetzt etwas dumm da, weil ich die nicht ohne Objekt aufrufen kann (das
ja grade gebaut wird) und this kann ich bei static ja auch net verwenden.

Also, irgendwie muss ich es hinkriegen, an NewEventLoopTimerUPP eine Funktion zu
übergeben die es "noch nicht gibt" oder von einer statischen Funktion etwas aufrufen
was es auch noch nicht gibt.

Oder das ganze aus der Klasse raus halten ...?

lg
Binary
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
Da ich nie mit Carbon programmier ist die Anwort etwas schwierig.

Ich nehme an, daß Du einen Function Pointer übergeben mußt. Wenn ein Pointer auf eine C-Function erwartet wird, dann mußt Du auch so einen übergeben. Der Zeiger auf einen static member function hat eine andere Aufrufkonvention. Auf einigen Plattformen funktioniert es trotzdem. Daher mag das mit Carbon funktionieren.

So zum eigentlichen Problem, Du willst also eine Callback-Handler schreiben. Erlaubt dieser Callback-Handler die Übergabe eines void* Parameters? Wenn ja, kannst Du das dazu benutzen eine (virtuelle) member function aufzurufen. Wenn nicht mußt Du Dich damit abfinden, daß die Klasse ein Singleton wird. Ob Du das im Sinn hattest? Irgend wie klang das nicht so.
 

Binary

Gast
Hi danke für deine Antwort.

Ich habs jetzt über eine virtuelle Funktion realisiert. Ich hab heraus gefunden,
dass es Callbacks so in C++ gar nicht mehr gibt und der Ersatz dafür eben virtuelle
Funktionen sind. Ein Singleton wäre nicht schlimm gewesen aber auch nicht schön.

lg
Binary