Ich bin ziemlich neu in C und C++. Ich habe die Aufgabe (es ist mehr für die Praxis), ein bestimmtes C-Modul in C++ zu ändern. Zu diesem Zweck muss ich zuerst die c-Dateien verstehen.Funktion Zeiger-Array: void ** Besetzung
Ich habe zwei spezifische Fragen, aber ich möchte Teile der Funktion in Kürze skizzieren. Ich versuche, allgemeine Identifikatoren zu verwenden.
Auszüge aus C-Code:
Es gibt einen Broker, die Funktionen Callbacks registrieren bietet. Der Broker hält die verschiedenen Callback-Typen in den entsprechenden Arrays.
Zunächst erklärten sie ein paar Funktionszeiger den Rückruf angeben:
typedef bool (*ReadRequestCallback_tpf) (param1 a, param2 b, param3 c);
typedef bool (*ReadResponseCallback_tpf) (param4 a, param5 b);
typedef bool (*WriteRequestCallback_tpf) (param6 a, param7 b, param8 c);
...
Dann machten sie Arrays für jede registrierte Rückrufe halten:
ReadRequestCallback_tpf ReadRequest_apf [MaxReadRequest];
ReadResponseCallback_tpf ReadResponse_apf [MaxReadResponse];
WriteRequestCallback_tpf WriteRequest_apf [MaxWriteRequest];
Es Funktionen gegeben sind neuen Rückruf registrieren:
void RegisterReadRequestCallback_v (ReadRequestCallback_tpf callback_pf){
AddCallback_v((void**)ReadRequest_apf, (void*) callback_pf);
}
void RegisterReadResponseCallback_v (ReadResponseCallback_tpf callback_pf){
AddCallback_v((void**)ReadResponse_apf, (void*) callback_pf);
}
void RegisterWriteRequestCallback_v (WriteRequestCallback_tpf callback_pf){
AddCallback_v((void**)WriteRequest_apf, (void*) callback_pf);
}
Die Signatur von AddCallback_v
ist wie:
void AddCallback_v (void* Array_apv[], void* function_pf)
Meine Fragen:
ist
(void**) array_apf
wirklichvoid* array_apv
? Also ist die Umwandlung eines 'Array von Funktionszeigern' zu 'void-Zeiger auf void-Zeiger' gleich einem 'void-Zeiger zu einem Array von void-Zeiger'? Da es funktioniert, scheint es so. Aber ich verstehe es nicht wirklich.Wenn Sie versuchen, es (oder Teile) in C++ zu ändern, ist es eine bessere Möglichkeit, eine Vorlage anstelle der Besetzung zu verwenden (void *)?
Dies ist mein erster Eintrag hier. Ich hoffe, ich könnte meine Fragen erklären. Wenn etwas geklärt werden muss, lass es mich wissen.
Mit freundlichen Grüßen und vielen Dank im Voraus
C und C++ sind nicht die gleiche Sprache, welche verwenden Sie eigentlich? – Barmar
Der eigentliche Code ist in C geschrieben. Jeder Code-Auszug ist in C. In Zukunft sollte es in C++ geschrieben werden. – DanK0904
anstelle des Arrays können Sie einen Vektor von std :: function versuchen –