Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

11

20.02.2011, 12:15

achso...

C-/C++-Quelltext

1
2
3
myclass object;
myclass *objectpointer = &object;
objectpointer->dosomething();

liegt object jetzt plötzlich auf dem heap? oO


Gut, daran habe ich so spät nachts nicht mehr gedacht, aber im Prinzip ist es ja nichts anderes: Erst dereferenzieren, dann zugreifen.

12

20.02.2011, 13:53

@Dot

Wenn ich das richtig verstanden habe, kann ich die Funktion nicht aufrufen, weil der Compiler ja nur weis, dass er die Funktion einer CRoom-Klasse aufrufen soll. Aber er weis nicht, von welcher Instanz er das tun soll.

Kann ich dann nicht einen Zeiger direkt auf die Funktion der Instanz erstellen? Ansonsten nützen mir ja Funktionszeiger nix.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

20.02.2011, 13:56

Wenn ich das richtig verstanden habe, kann ich die Funktion nicht aufrufen, weil der Compiler ja nur weis, dass er die Funktion einer CRoom-Klasse aufrufen soll. Aber er weis nicht, von welcher Instanz er das tun soll.

Kann ich dann nicht einen Zeiger direkt auf die Funktion der Instanz erstellen? Ansonsten nützen mir ja Funktionszeiger nix.

Eakt. Und nein, du kannst keinen Zeiger direkt auf die Funktion einer Instanz erstellen. Aber nichts hindert dich dran den Zeiger auf die Funktion und den Zeiger auf die Instanz irgendwo gemeinsam abzulegen ;)
Im Fachjargon bezeichnet man so einen "Zeiger auf eine Methode eines Objektes" übrigens als einen delegate.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

14

20.02.2011, 17:34

Also entweder du machst deine ganzen Funktionen, die du als Funktionszeiger verpacken willst, statisch. Oder - und das ist, was ich mal so in etwa gemacht habe - du verbindest je eine Funktion und die entsprechende Instanz, die diese Funktion ausführen soll.
Hierzu empfehle ich dir mal einen Blick in die Boost-Library zu wagen. Besonders die Abschnitte boost::bind und boost:function. Ich habe damals noch boost::ref verwendet, um eine Referenz als Objekt an den Funktionspointer übergeben zu können.

15

21.02.2011, 21:54

So, ich habs geschaft.

Da Funktionszeiger in meinem Fall nichts brachten, hab ich es wie vorgeschlagen mit einer Basisklasse gelöst. Die Funktionszeiger habe ich jetzt nur zum Aufrufen der Ladefunktion der Räume benutzt. Dank eurer Hilfe funktioniert das jetzt einwandfrei. Bei Gelegenheit werde ich hier meinen Code nochmals rein-editieren.

Vielen Dank euch für die Unterstützung! Ich bin immer wieder erstaunt, wie hilfsbereite Leute man in diesem anonymisierten Zeitalter trifft.

MfG Sydon

Werbeanzeige