Funktion über Parameter aufrufen
-
Hi,
Ich habe in meiner Klasse eine Funktion erstellt, die wenn sie die nötigen Daten hat eine auswert Funktion mit zwei Parametern aufruft.
Der Nutzer soll nun aber die auswert Funktion selber machen, d.h. beim Aufrufen der Klassen Funktion muss er den Funktionsnamen seiner auswert Funktion übergeben, damit meine Klasse dieße Funktion später aufrufen kann.
Wie mache ich soetwas? Den Funktionsnamen kann ich ja nicht als char Zeiger übergeben, da ich sie ja so nicht aufrufen kann.
Bsp.:int AUSWERTFUNKTION(char array[4096],int len) { //..... } //Aufruf: MEINEKLASSE::empfange(AUSWERTFUNKTION);MFG ReduX :xmas1:
-
Dazu gibts Funktionszeiger

class VerarbeitungsKlasse { public: // Hier definierst du einen Typ mit Namen "AuswertFunktion" als Funktionszeiger auf eine Methode mit // Signatur "void NAME( char*, int )" typedef void(*AuswertFunktion)(char*,int); void DoSomething( AuswertFunktion func ) { ... func( data, 123 ); } }; void MeinePersoenlicheAuswertFunktion( char* array, int len ) { ... } VerarbeitungsKlasse work; work.DoSomething( &MeinePersoenlicheAuswertFunktion ); // Bin mir nicht mehr sicher, _ob_ hier das '&' hinmuss
-
du verwendest funktionsobjekte.
#include <tr1/functional> using namespace std::tr1; using namespace std::tr1::placeholders; //übernimm eine function, die nichts (void) zurückgibt und einen int und ein //double erwaret: void funny (function<void(int,double)> fun) { fun (42, 2.3); //ruf die funktion auf } void bar (int, double) { } //... funny (bar); //und das ganze noch mit memberfunktionen: struct X { void foo (int, double) {} }; //... X x; funny (bind(&X::foo, &x, _1, _2)); //wir konstruieren ein neues funktionsobjekt, //denn X::foo hat eigentlich die signatur void (X*, int, double) - das X* für this //_1 und _2 sind platzhalter.