将指向成员函数的指针作为void *函数的参数传递

时间:2016-04-11 12:53:40

标签: c++ pointers function-pointers member-function-pointers

我有以下功能:

void PerformAction(void(*pf_action)());

以及以下课程:

class A
{
public:
    void DoSomething();
}

我希望能够做到这一点:

int main()
{
    A a;
    PerformAction(&(a.DoSomething);

    return 0;
}

我看过很多答案,说功能签名应该是:

void PerformAction(void(A :: *)());

这不是我想要的。

我希望能够传递任何不接收参数的函数/方法并返回void。不仅是A的成员方法,还有全局函数。

这在C ++中是否可行?

1 个答案:

答案 0 :(得分:2)

普通函数指针和成员函数指针是不同的东西。

成员函数采用隐藏的this参数,而普通函数则不行。要通过指针调用成员函数,需要一个对象来初始化this参数。

因此,您无法将指向非静态成员函数的指针转换为普通函数指针,并在不传入对象的情况下通过它进行调用。