我見過幾次使用以下模式來訪問受保護的成員函式。
class A{
public:
virtual ~A(){};
protected:
void foo{}.
};
class B : public A{};
class Hacky : public B{.
public:
using B::foo;
};
int main(){
B b;
A& a = b;
auto ptr = &Hacky::foo;
(a.*ptr)()。
}
我認為這是在本頁,內置指標到成員的訪問運算子,第5點(這里E1動態型別是B,它不包含Hacky::foo)之后的未定義行為,但我不是100%肯定。有人能對此給出一個明確的答案嗎?
uj5u.com熱心網友回復:
型別的ptr是void (A::*)(),而不是void (Hacky::*)(),所以它是好的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314141.html
標籤:
