Я знаю, что этот код не будет работать, и я также знаю, почему, но есть ли альтернатива?Участник виртуального базового класса
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
к B*
, поскольку A
является виртуальным базовым классом. Не литье parent
также дает ошибку. Надеюсь, мне не нужно публиковать всех участников. У кого-то есть идея, как получить доступ к A :: a?
Редактировать
Использование друзей не работает, так как классы, полученные из B
не имеют доступа к A::a
.
Без броска это, вероятно, не получается, потому что вы пытаетесь получить доступ к защищенному полю A в B. Вы можете просто добавить публичный приемник и удалить бросок в B *. –