g++
mi sta negando l'accesso a un tipo, solo perché capita di essere un nonno privato. Ha senso ciò?Tipo inaccessibile a causa dell'ereditarietà privata
struct A {};
struct B : private A {};
struct C : B {
void foo(A const& a) {}
};
compilando questo rendimenti:
1:10: error: ‘struct A A::A’ is inaccessible
6:12: error: within this context
il mio punto è: non ho mai voluto accedere A
come antenato. In effetti, se A
è un antenato privato di B
, non dovrebbe essere completamente invisibile a chiunque tranne B
(ad esempio C
)?
Ovviamente, potrei usare l'ereditarietà protected
ma nel mio caso non ha molto senso.
Non è affatto una caratteristica stupida; consente di limitare l'interfaccia ereditata individuando individualmente le funzioni da mostrare con 'using'. – avakar
Che cosa si potrebbe fare con le funzioni di inoltro senza la funzione e rendendo il modello di ereditarietà C++ meno ingombrante. l'ereditarietà privata non è l'ereditarietà della sua composizione e l'uso della stessa semantica per realizzare due concetti separati è solo fonte di confusione. – rerun
È una differenza tra la composizione e l'ereditarietà privata, perché quest'ultima consente l'accesso ai membri protetti di tuo padre mentre il primo non lo fa. – bitmask