代码:
struct A
{
void* f(void *)
{
}
};
int main()
{
void * (*fp)(void *);
fp = &A::f;
}
编译:
|12|error: cannot convert 'void* (A::*)(void*)' to 'void* (*)(void*)' in assignment|
我尝试了很多方法,但都失败了……该怎么做?
对于常规成员指针,您需要在指针类型上声明它是成员的类型;
int main()
{
void * (A::*fp)(void *);
fp = &A::f;
}
不要使用函数指针使用std::mem_fn
auto func = std::mem_fn(&A::f);
如果你真的想使用函数指针(你不需要),你必须这样做。
void * (A::*func)(void*);
func = &A::f;
IMO 这更丑陋,更难阅读,更难维护
你也可以std::function
这样使用。
A a;
std::function<void*(const A &, void*)> f_add_display = &Foo::print_add;
但mem_fn
更适合这份工作,因为你有一个记忆功能
std::function<void *( A&, void *)> fp = &A::f;