У меня есть указатель на функцию в качестве члена чисто виртуального базового класса. Я хотел бы передать этот указатель в библиотеку, которая не знает ни об одном из этих классов, MyBase или MyClass, а затем вызвать указатель функции в качестве обратного вызова в MyClass. Я тоже пишу библиотеку. Я хочу, чтобы разделяемая библиотека вызывала обратный вызов в MyClass.
Мой вопрос: как передать указатель на функцию в качестве аргумента функции и вызвать ее, не зная ничего о самом классе.
Я рассматривал указатель на указатель на функцию, но не знал, как правильно приводить.
class MyBase {
public:
virtual void callback() = 0;
void (MyBase::*callback_ptr)();
};
class MyClass : public MyBase {
public:
MyClass();
void callback() { cout << "callback called" << endl; };
};
main.cpp
{
MyClass my_class;
my_class->callback_ptr = &MyBase::callback;
lib->set_callback(my_class->callback_ptr);
}
lib.cpp
class MyLib {
public:
// how to declare the member function pointer here?
void** callback_ptr;
// how to write sig here?
set_callback(ptr) { callback_ptr = ptr }
running() {
// how to call the callback here w/o knowing it's type?
}
}