可以外部绑定类的公有的非静态成员函数吗?

可以在外部通过指针绑定类的公有的非静态成员函数吗?
MFC的消息映射似乎是这样做的

可以如下绑定


class A
{
public:
    void FunA()
    {
        std::cout << "Function A" << endl;
    }
};
 
int main()
{
    void(A::*p1)() = &A::FunA;
    //p1(); Error
    A a;
    A *p2 = &a;
    (a.*p1)(); // Succ
    (p2->*p1)(); // Succ
    return ;
}

是的,可以通过指针绑定类的公有非静态成员函数。在 C++ 中,可以使用函数指针绑定类的成员函数。MFC 的消息映射功能就是利用了这一特性。

以下是一个简单的例子,说明了如何绑定类的成员函数:


#include <iostream>

class Example {
public:
    void memberFunction() {
        std::cout << "This is a member function." << std::endl;
    }
};

int main() {
    Example example;
    void (Example::*ptr)() = &Example::memberFunction;
    (example.*ptr)();
    return 0;
}

在上面的代码中,我们创建了一个名为 Example 的类,其中包含一个名为 memberFunction 的公有非静态成员函数。然后我们定义了一个函数指针 ptr,指向 Example 类的 memberFunction 成员函数。最后,我们通过 example.*ptr 调用了 Example 类的 memberFunction 成员函数。