You cannot cast a function pointer to void*
.
If you want a function pointer to point to a member function you must declare the type as
ReturnType (ClassType::*)(ParameterTypes...)
Further you cannot declare a function pointer to a bound member function, e.g.
func_ptr p = &t1.get_pc // Error
Instead you must get the address like this:
func_ptr p = &test::get_pc // Ok, using class scope.
Finally, when you make a call to a function pointer pointing to a member function, you must call it with an instance of the class that the function is a member of. For instance:
(this->*cb_func)(); // Call function via pointer to current instance.
Here's the full example with all changes applied:
#include <iostream>
class test {
public:
typedef void (test::*callback_func_ptr)();
callback_func_ptr cb_func;
void get_pc();
void set_cb_ptr(callback_func_ptr ptr);
void call_cb_func();
};
void test::get_pc() {
std::cout << "PC" << std::endl;
}
void test::set_cb_ptr(callback_func_ptr ptr) {
cb_func = ptr;
}
void test::call_cb_func() {
(this->*cb_func)();
}
int main() {
test t1;
t1.set_cb_ptr(&test::get_pc);
t1.call_cb_func();
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…