考虑一个简单的例子:
struct FooParent {
virtual void bar() { }
};
struct Foo: FooParent {
void bar() { }
};
int main() {
Foo foo;
void (Foo::*foo_member)() = &FooParent::bar;
//(foo.*FooParent::foo_member)();
foo.FooParent::bar();
}
如您所见,foo
在调用 bar 成员函数时可以在对象上使用范围解析,而无法显式声明成员函数指针的范围。我接受在使用时应该禁止语法,->*
因为有时可能会以意想不到的方式重载运算符,但我无法理解在取消引用时阻止显式范围解析的原因.*
。
我正在尝试为指向基类的虚函数的成员指针禁用虚拟调度。