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|
我已经尝试了很多方法,但都失败了......那怎么办?
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
,因为你有一个memfunction
std::function<void *(A&, void *)> fp = &A::f;
退房['的std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)和['的std :: bind']( http://en.cppreference.com/w/cpp/utility/functional/bind)。 –