以下を考慮してください。C++で継承階層の一部を隠すことはできますか?
クラスB
は、クラスA
から公に継承されます。どちらもライブラリに用意されており、私はそれらを変更することはできません。
私はB
から派生するクラスFoo
を実装したいが、私はFoo
のユーザーが(ないB
から)A
とFoo
の唯一の公共の機能を使用できるようにしたいです。それらについては、Foo
がB
から継承されているということは関係ありませんが、これは原理的には避けられない実装の詳細です。
したがって、原則として、Foo
はA
から一般に継承されますが、私的にはB
になります。
C++にはこれを行うためのいくつかの構造体がありますか?
私の場合、A
はQObject
(Is it safe to use *virtual* multiple inheritance if QObject is being derived from DIRECTLY?を参照)から派生しているため、仮想継承はオプションではありません。
(NB:興味がある人のために:私の場合には、A
はQWindow
とB
がQt3DExtras::Qt3DWindow
である):この以来
class Foo : private B {
public:
using A::foo; // Expose function foo in Foo's API.
using A::bar;
operator A&() { return *this; } // Implicit conversion to `A` when needed.
operator A const&() const { return *this; }
};
'struct foo:A {B b; } '仕事? – Danh
あなたのクラスがBから派生したことを記録しないでください。それがAから派生しているとします。これは、Bへのアクセスを希望するユーザーを停止するメソッドではありません。 –