Ich fand mehrere ähnliche Fragen, aber die Lösungen passten nicht zu meinem Fall. In einer C++ - Methode rufe ich ein C api auf, das einen Callback als einen seiner Parameter akzeptiert.Nicht-statische Elementfunktion als Rückruf übergeben
class A
{
herr_t methodA(some parameters) {....}
void methodB(some parameters)
{
....
int status = CAPI(other parameters, callback, last parameter);
}
};
Der Prototyp ist CAPI
herr_t CAPI(some parameters, H5L_iterate_t op, other parameters);
H5L_iterate_t definiert wird durch
herr_t (*H5L_iterate_t)(hid_t g_id, const char *name,
const H5L_info_t *info, void *op_data)
methodA hat dieselbe Signatur wie H5L_iterate_t.
In methodeB,
status = CAPI(..., **(H5L_iterate_t)std::bind(&A::methodA, this,
std::placeholders::_1)**, ...);
Der Kompilierungsfehler ich bekam, war "Kann von nicht konvertieren ... zu H5L_iterate_t". Ich frage mich, was ist der richtige Weg, um die nicht statische Member-Funktion als Rückruf zu übergeben.
Vielen Dank im Voraus.
Mitglied Methoden Zeiger und Funktionszeiger sind nicht kompatibel. Sie könnten versuchen, eine freie Funktion, s static-Member-Methode oder s statusless Lambda zu schreiben, um einen Callback zu geben, der die tatsächliche Member-Methode aufruft und 'this' über' op_data' liefert. –
Für C-Callbacks, glaube ich, dass Sie einen Funktionszeiger benötigen. Es kann also keine nicht statische Elementfunktion sein. –
Ich weiß, eine statische Member-Funktion oder eine Plain-C-Funktion kann diesen Job erledigen. Aber ich brauche den Rückruf, um den Zustand des Objekts zu ändern. – Wqh