可以在外部通过指针绑定类的公有的非静态成员函数吗?
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 成员函数。