- Mitglied seit
- 04.08.2002
- Beiträge
- 1.869
- Reaktionen
- 0
Moin.
Es geht um FunctionPointer. Ganz einfache Frage:
Ich habe eine Klasse. Innerhalb dieser Klasse gibt es irgendeine Funktion, welche einen Pointer auf eine andere Funktion übergeben bekommen soll und diese dann ausführt.
Soweit alles kein Problem, wenn die zweite Funktion, auf die der übergebene Pointer zeigt, nicht selbst Member-Funktion einer Klasse ist. Denn ansonsten funktioniert das leider nicht so einfach.
Ich habe mittlerweile ein wenig im Internet gestöbert und ein wenig selbst herumexperimentiert und bin mittlerweile soweit, dass es funktioniert, wenn ich mir eine gemeinsame WrapperKlasse baue, beide Funktionen von dieser Klasse ableite und dann den Funktionspointer entsprechend caste... Allerdings ist das mit einer Menge Overhead verbunden, auf den ich gerne verzichten würde.
Also, kennt jemand von Euch eine einfache Möglichkeit, Pointer auf Funktionen über Klassengrenzen hinweg zu übergeben, ohne irgendwelche Third-Party-Libraries etc. zu benutzen und ohne eben den o.g. Umweg über eine WrapperKlasse zu gehen?
Bin da für jeden Tipp dankbar.
Gruß
m.a.k.
P.S.: Hier nochmal ein kleines Codebeispiel, falls oben noch nicht so ganz klar geworden sein sollte, was ich meinte (ist leider nicht korrekt eingerückt, aber ich hoffe, es geht auch so):
class CTest1
{
public:
CTest1(){};
~CTest1(){};
void TestIn(){printf("Erster Test innerhalb der Klasse");};
};
class CTest2
{
public:
CTest2(){};
~CTest2(){};
void TestCall(void(*pfunc)(void))
{
pfunc();
};
};
void TestOut()
{
printf("Zweiter Test außerhalb der Klasse");
}
int main()
{
CTest1 test1;
CTest2 test2;
test2.TestCall(TestOut); // <<== funktioniert ohne Probleme
test2.TestCall(test1.TestIn); // <<== das hier leider nicht
return(0);
}
Es geht um FunctionPointer. Ganz einfache Frage:
Ich habe eine Klasse. Innerhalb dieser Klasse gibt es irgendeine Funktion, welche einen Pointer auf eine andere Funktion übergeben bekommen soll und diese dann ausführt.
Soweit alles kein Problem, wenn die zweite Funktion, auf die der übergebene Pointer zeigt, nicht selbst Member-Funktion einer Klasse ist. Denn ansonsten funktioniert das leider nicht so einfach.
Ich habe mittlerweile ein wenig im Internet gestöbert und ein wenig selbst herumexperimentiert und bin mittlerweile soweit, dass es funktioniert, wenn ich mir eine gemeinsame WrapperKlasse baue, beide Funktionen von dieser Klasse ableite und dann den Funktionspointer entsprechend caste... Allerdings ist das mit einer Menge Overhead verbunden, auf den ich gerne verzichten würde.
Also, kennt jemand von Euch eine einfache Möglichkeit, Pointer auf Funktionen über Klassengrenzen hinweg zu übergeben, ohne irgendwelche Third-Party-Libraries etc. zu benutzen und ohne eben den o.g. Umweg über eine WrapperKlasse zu gehen?
Bin da für jeden Tipp dankbar.
Gruß
m.a.k.
P.S.: Hier nochmal ein kleines Codebeispiel, falls oben noch nicht so ganz klar geworden sein sollte, was ich meinte (ist leider nicht korrekt eingerückt, aber ich hoffe, es geht auch so):
class CTest1
{
public:
CTest1(){};
~CTest1(){};
void TestIn(){printf("Erster Test innerhalb der Klasse");};
};
class CTest2
{
public:
CTest2(){};
~CTest2(){};
void TestCall(void(*pfunc)(void))
{
pfunc();
};
};
void TestOut()
{
printf("Zweiter Test außerhalb der Klasse");
}
int main()
{
CTest1 test1;
CTest2 test2;
test2.TestCall(TestOut); // <<== funktioniert ohne Probleme
test2.TestCall(test1.TestIn); // <<== das hier leider nicht
return(0);
}
");