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

标签 c++ pointers function-pointers pointer-to-member

我有以下功能:

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++ 中可能吗?

最佳答案

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

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

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

关于c++ - 将指向成员函数的指针作为 void* 函数的参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36549276/

相关文章:

c++ - 为什么 decltype 看不到成员声明?

c++ - 无法通过引用传递对象

c++ - 向双端队列指针发出设置值

c++ - 分配给全局范围内的函数指针

c++ - 使用函数指针作为参数匹配模板失败

c++ - 对于 boost::variant,是否有 boost::visit 之类的 std::visit?

c++ - 如何使用字符串的值将字符串转换为 wstring?

c - 赋值 <指向常量数组的指针> = <指向数组的指针> : incompatible pointers

c++ - 函数名称上不明确的星号运算符

c++ - 在 C++ 中使用 Boost 从另一个类调用函数