g++
は、プライベートな祖父であるからといって、タイプへのアクセスを拒否しています。これは理にかなっていますか?私的継承によるアクセスできないタイプ
struct A {};
struct B : private A {};
struct C : B {
void foo(A const& a) {}
};
この利回りをコンパイル:
1:10: error: ‘struct A A::A’ is inaccessible
6:12: error: within this context
私のポイントは次のとおりです。私は祖先としてA
にアクセスしたかったことはありません。実際、A
がB
のプライベート祖先である場合、B
(つまりC
)以外の誰も完全に見えないはずですか?
もちろん、私はprotected
の継承を使用できますが、私の場合は実際には意味がありません。
これはまったくばかげた機能ではありません。 'using 'で公開する関数を個別に選択することで、継承されたインタフェースを制限することができます。 – avakar
機能を持たずにフォワーダ機能を使用して、C++継承モデルを煩雑にすることなくできることはどれですか。私的継承は継承の構成ではなく、同じセマンティクスを使用して2つの別々の概念を達成するのは紛らわしいだけです。 – rerun
構図と私的継承の違いは、後者はあなたの父親の保護されたメンバーにアクセスすることができるからです。 – bitmask