struct so richtig?
-
Hi,
Ich übergebe durch ein Struct daten an einen thread, nun habe ich den Struct noch einen dunktionszeiger eingearbeitet, nur weiß ich nicht ob das so korrekt ist, hier mal der Code:struct data{ int id; int buffer; bool type; void* callback; char* messange; data(const char* string = NULL,int id2,int buffer2,bool type2,void* call) { messange = new char[std::strlen(string)+1]; std::strcpy(messange,string); id = id2; buffer = buffer2; type = type2; callback = &call; } ~data() { delete [] messange; } };Fehler Meldung kommt keine aber ich kann das hier auch nicht wirklich austesten ob die Logik und so stimmt
MFG ReduX
-
Wenn du Funktionszeiger meinst, musst du auch Funktionszeiger schreiben. Es ist nicht garantiert, dass der Typ void* Funktionszeiger speichern kann.
Wenn deine callback-Funktion also z.B. die Signatur bool f(int) hat, dann musst du callback so deklarieren:
bool (*callback)(int);Ausserdem laesst sich dein Code so nicht kompilieren, aus mehreren Gruenden. Die wird dir aber der Compiler schon bereitwillig aufzaehlen.
-
Hi,
Danke für deine Antwort.
Ich möchte den struct gerne für alle Funktionen nutzen d.h. ich habe callback funktionen die like callback(int,char,int); callback(char,int,char); etc.
Da kann ich ja nicht jedesmal extra im struct ein ding anlegen da werde ich ja nichtmehr fertig.
Ich möchte es wenn es fertig ist so verwenden:void callback(int id,char* array) { // .... } data(callback()); // struct füllen //Im thread dann mittels callback(parameter); verwendenMFG ReduX
-
ReduX schrieb:
Hi,
Danke für deine Antwort.
Ich möchte den struct gerne für alle Funktionen nutzen d.h. ich habe callback funktionen die like callback(int,char,int); callback(char,int,char); etc.
Da kann ich ja nicht jedesmal extra im struct ein ding anlegen da werde ich ja nichtmehr fertig.Mir ist nicht genau klar, was du erreichen moechtest.
Vielleicht sind templates was fuer dich.Funktionszeiger haben halt einen festen Typ, der die Parameter und den Rueckgabewert kodiert. Und laut C++-Standard ist void* nicht unbedingt in der Lage einen Funktionszeiger zu speichern. Wenn du C++ programmierst, wuerde ich void* sowieso erstmal vergessen.
Einen Zeiger auf die Funktion callback bekommst du uebrigens mit &callback und nicht durch callback(). Mit letzterem rufst du die Funktion sofort auf.
-
Hi,
Ja sry hab es letztes mal ein bisschen dum geschrieben, also hier nochmal:
Ich habe mehrere Funktionen mit z.B. der signatur callback(char,int,char); und
callback(int,char,int);
Da ich ein haufen verschiedene Signaturen habe will ich das im Struct irgendwie dynamisch regeln, sprich das ich in einem Zeiger alle möglichen Signaturen verwenden kann.MFG ReduX
-
ReduX schrieb:
Da ich ein haufen verschiedene Signaturen habe will ich das im Struct irgendwie dynamisch regeln, sprich das ich in einem Zeiger alle möglichen Signaturen verwenden kann.
Spaetestens beim Aufrufen der Funktion musst du die korrekte Signatur wieder kennen, also muss dein Programm sich das so oder so merken.
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hi,
Werde es jetzt wohl so machen das ich für jede Funktion einen eigenen struct erstelle, da es jetzt doch nur 5 verschiedene Funktionen sind.Habe da noch eine Frage und zwar hab ich jetzt den code ca. so:
struct data { // blablabla }; class test_thread { // blablabla }; class test { // blablabla };Wie bekomme ich es jetzt hin das nur die beiden klassen auf das struct zugreifen kann? Sollte ich es mit verebung machen?
Stehe gerade voll aufm Schlauch, liegt wohl darran das ich nochnicht geschlafen habe^^MFG ReduX