サードパーティ ライブラリのレイアウトにより、次のようなコードがあります。
struct Base
{
static void SomeStaticMethod(){}
};
struct Derived1: private Base {};
struct Derived2: public Derived1 {
void SomeInstanceMethod(){
Base::SomeStaticMethod();
}
};
int main() {
Derived2 d2;
d2.SomeInstanceMethod();
return 0;
}
MSVC でコンパイラ エラー C2247 が発生します。
Base::SomeStaticMethod にアクセスできません。Derived1 がプライベートを使用して Base から継承しているためです。
Base
プライベート指定子のため、継承を介してメンバーにアクセスできないことはわかっていますが、との間の継承関係に関係なく、 -Derived2
の静的メソッドを呼び出すことができるはずです。
あいまいさを解決し、静的メソッドを呼び出しているだけであることをコンパイラに伝えるにはどうすればよいですか?Base
Base
Derived2