У меня есть библиотека C, для которой требуется функция обратного вызова для настройки некоторой обработки. Тип функции обратного вызова - int a(int *, int *)
.Использование функции члена класса C++ как функции обратного вызова C
Я пишу C++ код, подобный следующему и попытаться зарегистрировать C++ класса функции в качестве функции обратного вызова:
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()
{
}
Компилятор бросает следующие ошибки:
In constructor 'A::A()',
error:
argument of type ‘int (A::)(int*, int*)’ does not match ‘int (*)(int*, int*)’.
Мои вопросы:
- Прежде всего, можно зарегистрировать функцию memmber класса C++, как я пытаюсь сделать, и если так h вл? (я прочитал 32.8 на http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html.Но по-моему это не решает проблему)
- Есть ли альтернативный/лучший способ справиться с этим?
Да. это решение сработало. Что смущает меня, то компилятор не показал ошибку int (A ::) (A *, int *, int *) 'не соответствует' int() (int, int *) ' – Methos
Это было сделано, но, поставив (A: :), что означает, что функция является частью класса A, откуда отсюда подразумевается «этот» указатель. – GManNickG
Мне просто интересно ... это указано в стандарте? Я просто взглянул на раздел о занятиях и не нашел этого. Тем не менее, очень интересно. Я просто не думаю, что каждый компилятор обязательно должен обрабатывать нестатические функции-члены таким образом. – Tom