class A {
public:
A() {auto tmp = &A::foo;}
protected:
void foo() {}
};
class B : public A {
public:
B() {auto tmp = &A::foo;}
};
Run Code Online (Sandbox Code Playgroud)
类A编译没问题.类B产生编译错误:
'A :: foo':无法访问类'A'中声明的受保护成员
为什么这样,理由是什么?有没有办法绕过这个(如果我需要指针回调std::function等)?
如果您能够获取指向 的指针A::foo,则可以使用它来调用类型或派生自 的类型foo的对象:ACA
class B : public A {
public:
void xx(A a) { auto tmp = &A::foo; a.*tmp(); } // illegal
}
Run Code Online (Sandbox Code Playgroud)
相反,取一个指向B::foo;的指针。这很好,因为您只能在类型为B您自己的类的对象上使用它。
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |