g++
odmawia mi dostępu do typu, tylko dlatego, że jest to prywatny dziadek. Czy to ma sens?Niedostępny typ z powodu prywatnego dziedziczenia
struct A {};
struct B : private A {};
struct C : B {
void foo(A const& a) {}
};
sporządzenia niniejszego plony:
1:10: error: ‘struct A A::A’ is inaccessible
6:12: error: within this context
Mój punkt brzmi: nigdy nie chciałem, aby uzyskać dostęp A
jako przodka. W rzeczywistości, jeśli A
jest prywatnym przodkiem B
, czy nie powinno to być całkowicie niewidoczne dla nikogo oprócz B
(tj.)?
Oczywiście mógłbym używać dziedziczenia protected
, ale w moim przypadku nie ma to większego sensu.
to nie jest głupi funkcja w ogóle; pozwala ograniczyć dziedziczony interfejs poprzez indywidualne wybieranie funkcji do wyświetlania przy użyciu 'use'. – avakar
Co można zrobić z funkcjami forwardera bez funkcji i dzięki czemu model dziedziczenia C++ jest mniej zagracony. dziedziczenie prywatne nie jest dziedziczeniem, a jego skład i używanie tej samej semantyki do realizacji dwóch oddzielnych koncepcji jest tylko mylące. – rerun
Jest to różnica między składem a dziedziczeniem prywatnym, ponieważ ta ostatnia pozwala na dostęp do chronionych członków twojego ojca, podczas gdy ten pierwszy nie. – bitmask