Pointer auf eine Member-Funktion
-
Hallo,
ich hab gerade keine Idee mehr... Ich hab folgenden Code-Ausschnitt:
class Data; typedef double (Data::*value_func)(int); class Data { public: double Value(int i) { return 1.0*i; } double Max(value_func func, int max_index) { double temp = this->func(0); // error: ‘class Data’ has no member named ‘func’ for (int i=0; i<=max_index; ++i) if (temp<this->func(i)) // error: ‘class Data’ has no member named ‘func’ temp = this->func(i); // error: ‘class Data’ has no member named ‘func’ } }; int main() { Data data; std::cout << data.Max(data.Value, 10) << std::endl; // error: no matching function for call to ‘Data::Max(<unresolved overloaded function type>, int)’ // note: candidates are: double Data::Max(double (Data::*)(int), int) }Die Fehler-Meldungen stehen als Kommentar hinter den entsprechenden Zeilen.
Funktionspointer von nicht-static Member-Funktionen sind im Allgemeinen nicht möglich. Aber in diesem Fall sollten ja die Funktion Max auf die Daten der eigenen Klasse zugreifen, d.h. der this-Pointer wäre vorhanden. Allerdings wird der Ausdruck 'this->func' nicht so interpretiert, wie ich mir das wünschen würde

Hmmm... kann mir jemand einen Tipp geben?
Grüße, K.B.
-
schau mal in die libsvm,
da wird sowas gemacht mit den Kernelfunktionen, spontan weiß ich das jetzt auch nicht
-
mach es so

class Data; typedef double (Data::*value_func)(int); class Data { public: double Value(int i) { return 1.0*i; } double Max(value_func func, int max_index) { double temp = (this->*func)(0); // ->* und () !! for (int i = 0; i <= max_index; ++i) if (temp < (this->*func)(i)) temp = (this->*func)(i); return temp; } }; int main() { Data data; std::cout << data.Max(&Data::Value, 10) << std::endl; // addresse von der klassenfunktion. diese funktion hat noch kein objekt }
-
Vielen Dank für die Hilfe!
-
ist zwar schon spät, aber meines erachtens gehört da kein this-> davor... ^^
gn8 : >
-
unskilled schrieb:
ist zwar schon spät, aber meines erachtens gehört da kein this-> davor... ^^
Und von was willst Du den ->* Operator aufrufen, wenn nicht von this?

-
gibts da nicht den ::* operator um mit dem klassennamen aufzurufen
(wieder ungetestet)
-
helferlein schrieb:
gibts da nicht den ::* operator um mit dem klassennamen aufzurufen
(wieder ungetestet)Du brauchst doch aber eine gültige Instanz, wenn du eine Memberfunktion aufrufen willst?!