Ich habe eine C-Bibliothek, die eine Callback-Funktion benötigt, um für die Anpassung einer Verarbeitung registriert zu werden. Der Typ der Callback-Funktion ist int a(int *, int *)
.Verwenden einer C++ - Klassenmitgliedsfunktion als C-Callback-Funktion
Ich schreibe C++ Code ähnlich die folgenden und versuchen, ein C++ Klasse Funktion als Callback-Funktion zu registrieren:
class A {
public:
A();
~A();
int e(int *k, int *j);
};
A::A()
{
register_with_library(e)
}
int
A::e(int *k, int *e)
{
return 0;
}
A::~A()
{
}
Der Compiler führt folgende Fehlermeldung:
In constructor 'A::A()',
error:
argument of type ‘int (A::)(int*, int*)’ does not match ‘int (*)(int*, int*)’.
Meine Fragen:
- Zunächst ist es möglich, eine C++ - Klasse Memeber-Funktion wie ich versuche zu registrieren, und wenn ja, h ow? (Ich lese 32,8 bei http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html. Aber meiner Meinung nach löst es das Problem nicht)
- Gibt es eine alternative/bessere Möglichkeit, dies anzugehen?
ja. Diese Lösung hat funktioniert. Was mich verwirrt, ist Compiler nicht Fehler gezeigt int (A ::) (A *, int *, int *) 'stimmt nicht' int() (int, int *) ' – Methos
Es tat, aber indem (A: :) was bedeutet, dass die Funktion Teil der Klasse A ist, was von dort den 'this' Zeiger impliziert. – GManNickG
Ich bin nur neugierig ... ist das im Standard angegeben? Ich schaute nur auf den Abschnitt über Klassen und fand das nicht. Trotzdem sehr interessant. Ich würde einfach nicht denken, dass jeder Compiler notwendigerweise nicht-statische Elementfunktionen auf diese Weise behandeln muss. – Tom