alternative zu funktionszeiger
-
doktor banane schrieb:
das mit den zeigern auf methoden scheint aber nur für statische methoden zu funktionieren.
→
datatype some_operation1(datatype const& (myclass::* getter)(int, int) const = &myclass::normal_getter) const;Edit:
Das ist aber iwie fragwürdig. Der Benutzer kann/soll keine eigenen getter definieren, da sie Teil der struct sind. Warum dann überhaupt Zeiger auf die vordefinierten, struct-internen Getter übergeben und nicht einfach mehrere Methoden anbieten und die ganzen Details verbergen?
-
lol, ich weiss nicht ob das ein compiler-bug ist aber auf jeden fall habe ich festgestellt, dass die klammern beim default-parameter (wenn man sie um den auflösungsoperator :: setzt, der sowieso stärker bindet als der dereferenzierungsoperator & und somit keinen semantischen unterschied machen dürfte) das verhalten verändern:
ohne klammern, kompiliert einwandfrei:
http://ideone.com/cLOsw7mit klammern, fehler mit den nicht-statischen methoden bla bla:
http://ideone.com/Ta1ZxOan alle, danke für die hilfe (:
-
nachtrag:
mir ist natürlich schon aufgefallen, dass µ in seinem beitrag primär den rückgabetyp des methodenzeigers gefixt hat, jedoch war das in meinem echten projekt stets richtig (da es dort keine referenz ist).
-
datatype some_operation1(datatype const& (myclass::* getter)(int, int) const = &myclass::normal_getter) const;Macht das überhaupt Sinn? Wo issn da der this.
Kanns Methodenzeiger überhaupt Default-Werte geben
-
Kanns Methodenzeiger überhaupt Default-Werte geben
Du kannst ausnahmslos jedem Funktionsparameter, der auch als Funktionsparameter 'funktioniert' (also kompiliert usw.), default-Argumente geben.
-
Jau, aber eben nur statische methoden ... oder?
-
ScottZhang schrieb:
Jau, aber eben nur statische methoden ... oder?
Was genau ist deine Frage?
-
ScottZhang schrieb:
datatype some_operation1(datatype const& (myclass::* getter)(int, int) const = &myclass::normal_getter) const;Macht das überhaupt Sinn? Wo issn da der this.
Du weißt schon, dass man Memberzeigern so einen Wert gibt:
Ret (Class::*ptr) (Args...) = &Class::foo;Und sie so aufruft:
(someObjectOfTypeClass.*ptr)(Arguments...);
-
Also meine Frage ist nach dem Sinn, einem Methodenzeiger default-wert zu geben zu wollen. Denn eine nicht-statische Methode ist an ein Objekt gebunden (this) und das muss ersteinmal existieren.
-
Denn eine nicht-statische Methode ist an ein Objekt gebunden (this) und das muss ersteinmal existieren.
Nein, eine nicht-statische Memberfunktion kann auch ohne Objekt existieren. Sie kann nur nicht ohne Objekt aufgerufen werden (kann man theoretisch, macht man nicht).
-
Nathan schrieb:
ScottZhang schrieb:
datatype some_operation1(datatype const& (myclass::* getter)(int, int) const = &myclass::normal_getter) const;Macht das überhaupt Sinn? Wo issn da der this.
Du weißt schon, dass man Memberzeigern so einen Wert gibt:
Ret (Class::*ptr) (Args...) = &Class::foo;Und sie so aufruft:
(someObjectOfTypeClass.*ptr)(Arguments...);Ok das wusste ich nicht, ich habe die Methodenzeiger noch nie benutzt.
Danke.Edit: Und danke an Sone.
Edit2: Das ne Methode ohne obj existiert war mir schon klar. Mir war nur nicht ganz klar was der Thread Ersteller wollte
