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|

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

4

3 回答 3

3

对于常规成员指针,您需要在指针类型上声明它是成员的类型;

int main()
{
    void * (A::*fp)(void *);
    fp = &A::f;
}
于 2013-08-16T05:50:22.387 回答
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更适合这份工作,因为你有一个记忆功能

于 2013-08-16T05:50:02.030 回答
1
 std::function<void *( A&, void *)> fp = &A::f;
于 2013-08-16T06:02:15.360 回答