代码:
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|
我尝试了很多方法,但都失败了...怎么做?
答案 0 :(得分:3)
不要使用函数指针使用std::mem_fn
auto func = std::mem_fn(&A::f);
如果你真的想使用函数指针(你没有),你必须这样做。
void * (A::*func)(void*);
func = &A::f;
国际海事组织这是更丑陋,更难阅读和更难维护
你也可以像这样使用std::function
。
A a;
std::function<void*(const A &, void*)> f_add_display = &Foo::print_add;
但mem_fn
更适合这项工作,因为你有一个记忆功能
答案 1 :(得分:3)
对于常规成员指针,您需要在指针类型上声明它是其成员的类型;
int main()
{
void * (A::*fp)(void *);
fp = &A::f;
}
答案 2 :(得分:1)
std::function<void *( A&, void *)> fp = &A::f;