私の友人は私に次のコードを見せてくれました
struct A {
virtual void f() = 0;
virtual void g() = 0;
};
struct AInternal : A {
virtual void f() { /* ... */ }
virtual void g() { /* ... */ }
};
彼はAInternal
、ほとんど (すべてではないにしてもA
) を実装する内部クラスとして使用しています。その後、彼は から継承しましAInternal
たが、彼が望んでいたようにAInternal
(これは実装の詳細であるため) アクセスできないままであり、保護された (実装された) を継承します。彼が行ったusing
ことは、基本クラス名をアクセス可能にすることでした (継承も保護A
されていたため、デフォルトで保護されていました)。AInternal
struct C : protected AInternal {
using AInternal::A;
};
実際、これは問題なく動作しました (ただし、後でわかったように、メンバー関数は保持されていましprivate
た。基本クラスが作成されpublic
ただけです)。ただし、GCC でしか動作しませんでした。ベースをA
アクセス可能にできません。何か案が?Clang で動作するコードを壊すことさえできます
struct C : public AInternal {
protected:
using AInternal::A;
};
C *c = 0;
A *a = c; // error on GCC!
誰か助けてくれませんか?