kickerxy123
Erfahrenes Mitglied
Hallo,
ich habe ein Problem mit Templates/Funktionen. Und zwar schreibe ich eine Thread-Klasse, die in etwa so laufen soll:
Ziel ist also, dass eine x-beliebige Funktion, egal wie sie aufgebaut ist, in ein Thread durch meine Klasse verlagert wird.
Jetzt kriege ich das ganze kompiliert, wenn ich eine Funktion mit dem Aufbau void Func(void); habe. Allerdings nicht mit beliebig aufgebauten Funktionen. Daher hatte ich zwei Ansätze/Ideen:
1.) Variadic Templates benutzen (müsste ich mich mal einarbeiten..)
2.) Den Aufbau einer Funktion besser verstehen. Denn was eine void a(void) von anderen Funktionen trennt ist bloß eine Parameter- und Rückgabeliste und die Funktion hat nach wie vor eine Startadresse. D.h. ich müsste wissen, ob die Parameterliste immer an einer bestimmten Stelle im Speicher nach der Startadresse kommt und diese Werte manuell füllen und die Funktion als void a(void) aufrufen und am Ende den Rückgabewert aus dem Speicher holen (kann das überhaupt gehen, oder springen da alle c++ Sicherungen raus
?)
zu 1) das ist leider recht problematisch, da ich ein TYPANY a(TYPANY, ..) nicht in meiner Klasse weiterreichen kann (der Konstruktor müsste das weiterreichen können; dazu müsste ich z.B. die Typen speichern können etc)
Ich bin leider etwas ratlos...
Kann mir bitte wer einen Denkanstoß geben?
Danke und Gruß,
kickerxy
#edit: Die Adressen der Parameter kann ich ja ermitteln, aber die des Rückgabewertes :?:
Die wichtigste Frage wäre, ob diese manipulierte Art des Funktionsaufrufes funktionieren kann.
ich habe ein Problem mit Templates/Funktionen. Und zwar schreibe ich eine Thread-Klasse, die in etwa so laufen soll:
C++:
CThread(meineFunktion(para1,para2,...), someFlag);
Ziel ist also, dass eine x-beliebige Funktion, egal wie sie aufgebaut ist, in ein Thread durch meine Klasse verlagert wird.
Jetzt kriege ich das ganze kompiliert, wenn ich eine Funktion mit dem Aufbau void Func(void); habe. Allerdings nicht mit beliebig aufgebauten Funktionen. Daher hatte ich zwei Ansätze/Ideen:
1.) Variadic Templates benutzen (müsste ich mich mal einarbeiten..)
2.) Den Aufbau einer Funktion besser verstehen. Denn was eine void a(void) von anderen Funktionen trennt ist bloß eine Parameter- und Rückgabeliste und die Funktion hat nach wie vor eine Startadresse. D.h. ich müsste wissen, ob die Parameterliste immer an einer bestimmten Stelle im Speicher nach der Startadresse kommt und diese Werte manuell füllen und die Funktion als void a(void) aufrufen und am Ende den Rückgabewert aus dem Speicher holen (kann das überhaupt gehen, oder springen da alle c++ Sicherungen raus

zu 1) das ist leider recht problematisch, da ich ein TYPANY a(TYPANY, ..) nicht in meiner Klasse weiterreichen kann (der Konstruktor müsste das weiterreichen können; dazu müsste ich z.B. die Typen speichern können etc)
Ich bin leider etwas ratlos...
Kann mir bitte wer einen Denkanstoß geben?
Danke und Gruß,
kickerxy
#edit: Die Adressen der Parameter kann ich ja ermitteln, aber die des Rückgabewertes :?:
Die wichtigste Frage wäre, ob diese manipulierte Art des Funktionsaufrufes funktionieren kann.
Zuletzt bearbeitet: