Methodenzeiger abgeleiteter Klassen

Schnelle objektorientierte, kompilierende Programmiersprache.
Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Methodenzeiger abgeleiteter Klassen

Beitrag von Glocke » Mi Apr 17, 2013 12:11 pm

Aber wie calle ich dann die Methode? (this->*callback)(data); funktioniert nicht mehr, dann Derived ist inkompatibel mit Base<Derived>. Dabei habe ich ja einen Pointer auf eine Derived-Methode, aber rufe von einer Base<Derived> aus auf (also this ist Zeiger auf Base<Derived>) ... Weißt du was ich meine? :D

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Methodenzeiger abgeleiteter Klassen

Beitrag von Xin » Mi Apr 17, 2013 12:19 pm

Glocke hat geschrieben:Aber wie calle ich dann die Methode? (this->*callback)(data); funktioniert nicht mehr, dann Derived ist inkompatibel mit Base<Derived>. Dabei habe ich ja einen Pointer auf eine Derived-Methode, aber rufe von einer Base<Derived> aus auf (also this ist Zeiger auf Base<Derived>) ... Weißt du was ich meine? :D
Hmm... ja, ich denke schon...

Und das klingt jetzt ein wenig plöd... aber das Problem löse ich in der Regel auch mit einem Cast... ^^

Der Unterschied an der Stelle ist jetzt eher, dass Du Dir mit T = Derived sehr sicher sein kannst, dass this ein Derived ist. Wichtig ist hier, dass die Casts hier im Template sind und nicht über das Progamm verteilt sind, sondern genau in dem Design-Pattern, was diese 'Hacks' in sich versammelt...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Methodenzeiger abgeleiteter Klassen

Beitrag von Glocke » Mi Apr 17, 2013 12:22 pm

Also wäre es an der Stelle vertretbar zu casten? Ich hab dabei

Code: Alles auswählen

Derived* ptr = static_cast<Derived*>(this)
im Auge, dann kann ich mit ptr, statt this aufrufen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Methodenzeiger abgeleiteter Klassen

Beitrag von Xin » Mi Apr 17, 2013 12:27 pm

Glocke hat geschrieben:Also wäre es an der Stelle vertretbar zu casten? Ich hab dabei

Code: Alles auswählen

Derived* ptr = static_cast<Derived*>(this)
im Auge, dann kann ich mit ptr, statt this aufrufen.
Das ist eine der wenigen Stellen, wo ich caste - und auch genau so.
Aber es spielt sich eben alles in Base< Derived > ab, wo this definitiv ein Derived sein soll (was leider durch die Sprache nicht garantiert ist, aber eben doch sehr "gewünscht" ist)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Methodenzeiger abgeleiteter Klassen

Beitrag von Glocke » Mi Apr 17, 2013 12:31 pm

Okay, dann habe ich die Sache ab hier wieder im Griff, danke :)

Antworten