このコードが機能しないことはわかっており、その理由もわかっていますが、代替手段はありますか?
class A
{
public:
A(void){}
virtual ~A(void){}
protected:
A* parent;
int a;
};
class B : public virtual A
{
public:
B(void){}
virtual ~B(void){}
protected:
void f(){ ((B*)parent)->a; }
};
は仮想基底クラスであるため、にキャストparent
することはできません。キャストしないとエラーになります。すべてのメンバーを公開する必要がないことを願っています。A::a にアクセスする方法を知っている人はいますか?B*
A
parent
編集
から派生したクラスB
は にアクセスできないため、フレンドの使用は機能しませんA::a
。