【发布时间】:2017-01-30 07:33:23
【问题描述】:
考虑一个简单的例子:
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();
}
如您所见,当调用 bar 成员函数时,可以在 foo 对象上使用范围解析,而无法显式声明成员函数指针的范围。我接受在使用 ->* 时应禁止该语法,因为有时会以意想不到的方式重载运算符,但我无法理解使用 .* 取消引用时阻止显式范围解析的原因。
我正在尝试禁用指向基类虚函数的成员指针的虚拟调度。
【问题讨论】:
标签: c++ language-lawyer virtual-functions dereference member-pointers