Mam bibliotekę C, która potrzebuje funkcji wywołania zwrotnego do zarejestrowania, aby dostosować niektóre przetwarzanie. Typ funkcji zwrotnej to int a(int *, int *)
.Używanie funkcji członka klasy C++ jako funkcji wywołania zwrotnego C
piszę C++ kod podobny do poniższego i próbować zarejestrować C++ funkcją klasy jako funkcji callback:
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()
{
}
Kompilator generuje następujący błąd:
In constructor 'A::A()',
error:
argument of type ‘int (A::)(int*, int*)’ does not match ‘int (*)(int*, int*)’.
moje pytania:
- Przede wszystkim można zarejestrować funkcję pamięci klas C++, tak jak ja próbuję zrobić, a jeśli tak, to ow? (Czytałem 32,8 przy http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html. Ale moim zdaniem to nie rozwiązuje problemu)
- Czy istnieje alternatywny/lepszy sposób rozwiązania tego problemu?
tak. to rozwiązanie zadziałało. Co mnie myli, to kompilator nie pokazuje błędu int (A ::) (A *, int *, int *) "nie pasuje" int() (int, int *) ' – Methos
Zrobił to, ale przez umieszczenie (Odp .: :) co oznacza, że funkcja jest częścią klasy A, która z tego miejsca implikuje "ten" wskaźnik. – GManNickG
Jestem po prostu ciekawy ... czy jest to określone w standardzie? Po prostu rzuciłem okiem na sekcję o klasach i nie znalazłem tego. Niemniej jednak bardzo interesujące. Po prostu nie sądzę, że każdy kompilator musi w ten sposób obsługiwać niestatyczne funkcje członkowskie. – Tom