2013-08-16 65 views
0

代码:如何创建一个指向成员函数的函数指针?

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

退房['的std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)和['的std :: bind']( http://en.cppreference.com/w/cpp/utility/functional/bind)。 –

回答

3

对于普通成员指针,你需要声明它是对指针类型成员的类型更适合这份工作;

int main() 
{ 
    void * (A::*fp)(void *); 
    fp = &A::f; 
} 
3

不要使用函数指针使用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

1
std::function<void *(A&, void *)> fp = &A::f; 
相关问题