g++
me niega el acceso a un tipo, solo porque resulta ser un abuelo privado. ¿Esto tiene sentido?Tipo inaccesible debido a herencia privada
struct A {};
struct B : private A {};
struct C : B {
void foo(A const& a) {}
};
compilar esta rendimientos:
1:10: error: ‘struct A A::A’ is inaccessible
6:12: error: within this context
Mi punto es: nunca quisieron acceder A
como un antepasado. De hecho, si A
es un ancestro privada de B
, no debe esto sea completamente invisible a nadie más que a B
(es decir C
)?
Por supuesto, podría usar protected
herencia, pero en mi caso no tiene mucho sentido.
No es una característica estúpida en absoluto; le permite a uno restringir la interfaz heredada seleccionando individualmente las funciones para exponer con 'using'. – avakar
Lo que podría hacer con las funciones del reenviador sin la función y hacer que el modelo de herencia C++ sea menos abarrotado. la herencia privada no es herencia, su composición y usar la misma semántica para lograr dos conceptos separados es solo confusa. – rerun
Es una diferencia entre la composición y la herencia privada, porque esta última le permite acceder a miembros protegidos de su padre, mientras que la primera no. – bitmask