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

时间:2013-08-16 05:46:28

标签: c++ pointers

代码:

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|

我尝试了很多方法,但都失败了...怎么做?

3 个答案:

答案 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;