我试图理解 C++ 如何在继承上下文中处理成员函数指针和重载解析。我有一个带有纯虚函数的基类和一个派生类。我重载了一个函数 doSomething 来接受来自基类和派生类的成员函数指针。以下是代码:
#include <iostream>
class Base {
public:
virtual void foo() = 0;
};
class Derived: public Base {};
void doSomething(void (Base::*func)(void)) {
std::cout << "Base overload\n";
}
void doSomething(void (Derived::*func)(void)) {
std::cout << "Derived overload\n";
}
int main(void) {
doSomething(&Derived::foo);
}
当我运行此代码时,输出是:
Base overload
我期望调用“Derived 重载”,因为我传递的是 Derived::foo 的地址。有人能解释一下为什么在这种情况下选择“Base 重载”吗?我有兴趣了解导致这种行为的底层 C++ 机制。