[C++] Problem mit Funktionspointer

Auch zu meinem Threaded-Programm:

Die C-Funktion pthread_create() die mir einen neuen Thread anlegt erwartet als einen Parameter
„(void*)*funktion(void*)“

Allerdings geht mit dieser Code nicht durch meinen C+±Compiler (durch nen C Compiler schon, wenn ich die Objekt-Syntax rausmache), er sagt immer dass die Funktion zurückgeben muss:

void\* startLookupThread(void\* dummy)
{
 ((LookupThread\*)dummy)-\>run();
}

ist es ok, wenn ich einfach noch ein „return NULL;“ reinmache? Dann compiliert er mirs ja , aber ich denke das isses nicht :wink:

Bruno

Hallo mal wieder :smile:

Die C-Funktion pthread_create() die mir einen neuen Thread
anlegt erwartet als einen Parameter
„(void*)*funktion(void*)“

Allerdings geht mit dieser Code nicht durch meinen
C+±Compiler (durch nen C Compiler schon, wenn ich die
Objekt-Syntax rausmache), er sagt immer dass die Funktion
zurückgeben muss:

void* startLookupThread(void* dummy)
{
((LookupThread*)dummy)->run();
}

ist es ok, wenn ich einfach noch ein „return NULL;“ reinmache?
Dann compiliert er mirs ja , aber ich denke das isses nicht :wink:

Den Funktionspointersyntax muss ich auch jedesmal nachschlage und komme dann meist doch nur durch probieren zum richtigen Syntax … was das Problem bei Dir ist seh ich daher nicht, aber …
Ich habe mir angewoehnt, keine Funktionspointer im ueblichen Sinn mehr zu verwenden, stattdessen nnehme wos geht eine Basisklasse mit virtueller Funktion ohne Datenmembers:

class Function {
public:
virtual rueckgabetyp machWas(parameter …) = 0;
};

Das = 0 sorgt dafuer, dass es rein rein Virtuelle Klasse ist, von der keine Instanzen erzeugt werden koennen. Die „FUnktionspointer“, die ich brauche werden davon vererbt:

class makeThread : public Function {
public:
rueckgabetyp machWas(parameter …) {…}
};

Im Programm kann man das dann so verwenden:

void bla(Function* x) {
x->machWas(…);
}

void main(void) {
makeThread blub;
bla(blub);
}

Das ermoeglicht alles, was man auch mit Funktionspointern machen kann, hat aber nen schoen lesbaren Syntax. Und Initialisierungen, die manche Funktionen brauchen, kann man praktischerweise gleich in den Konstruktor packen und und und …
Fals Du Funktionspointer partout verwenden willst, der Syntax steht natuerlich in Thinking in C++ mit den abgefahrendsten Faellen …

Gruss

Thorsten

Fals Du Funktionspointer partout verwenden willst, der Syntax
steht natuerlich in Thinking in C++ mit den abgefahrendsten
Faellen …

Ich will nicht :smile: aber diese C-Bibliotheken die ich verwende zwingen mich , hehe

Bru