g++
Me refuse l'accès à un type, juste parce qu'il se trouve être un grand-père privé. Est-ce que ça a du sens?Type inaccessible en raison de l'héritage privé
struct A {};
struct B : private A {};
struct C : B {
void foo(A const& a) {}
};
replissant ce rendement:
1:10: error: ‘struct A A::A’ is inaccessible
6:12: error: within this context
Mon point est: je ne voulais accéder A
comme un ancêtre. En fait, si A
est un ancêtre privé de B
, cela ne devrait-il pas être complètement invisible pour tout le monde mais B
(c'est-à-dire C
)?
Bien sûr, je pourrais utiliser l'héritage protected
mais dans mon cas cela n'a pas vraiment de sens.
Ce n'est pas une fonctionnalité stupide du tout; il permet de restreindre l'interface héritée en sélectionnant individuellement les fonctions à exposer avec 'using'. – avakar
Ce que vous pouvez faire avec les fonctions de redirecteur sans la fonctionnalité et rendre le modèle d'héritage C++ moins encombré. l'héritage privé n'est pas l'héritage de sa composition et l'utilisation de la même sémantique pour accomplir deux concepts distincts n'est que source de confusion. – rerun
C'est une différence entre la composition et l'héritage privé, car ce dernier vous permet d'accéder à des membres protégés de votre père alors que le premier ne le fait pas. – bitmask